import openpyxl


#
def read16excel(path):

    # 实例化excel表
    wb = openpyxl.load_workbook(path)

    # 创建新工作表
    wb.create_sheet("Sheet2")

    # 查看sheet页名字
    print(wb.sheetnames)

    # 通过索引定位sheet页
    sheet = wb.worksheets[0]

    # sheet.values返回一个生成器 每行信息放在一个元组内
    print(type(sheet.values))
    g_values = sheet.values
    print(g_values.__next__())
    print(g_values.__next__())
    print(g_values.__next__())

    # 定位cell 循环列   iter_rows可以循环行 (指定循环的最小/大列、最小/大行数)
    data_list = []
    for column in sheet.iter_cols(min_col=1, max_col=2, min_row=1, max_row=5):
        for cell in column:
            data_list.append(cell.value)

    # 实例调用save方法可以关闭表格,否则后续调用会出现占用报错Permission denied
    wb.save(path)
    return data_list


# 写/修改
list1 = [[1, "a"], [2, "b"], [3, "c"], [4, "d"], [5, "e"]]


def write16excel(data, path, sheetname):

    # 实例化excel表
    # Workbook()方法可以新建excel,如果已经存在会覆盖
    # load_workbook()可以载入已存在的excel进行修改
    # wb = openpyxl.load_workbook(path)
    wb = openpyxl.Workbook()

    # 新建sheet页
    wb.create_sheet(sheetname)

    # 激活实例
    # 修改_active_sheet_index值可以更换要激活的sheet页索引,默认是0
    wb._active_sheet_index = 1
    sheet = wb.active

    # 获取sheet页的最大行和列
    # max_row = sheet.max_row
    # max_col = sheet.max_column

    # 循环插入sheet页
    for num in range(len(data)):
        sheet.cell(row=num+1, column=2, value=str(data[num][0]))
        sheet.cell(row=num+1, column=3, value=str(data[num][1]))
        if num + 1 == 2:
            sheet.cell(row=num+1, column=4, value="查询结果不一致")
        elif num + 1 == 3:
            sheet.cell(row=num+1, column=4, value="无查询结果")
        else:
            continue

    # 定义/更改当前操作的sheet页名
    sheet.title = "sheet3"

    # 指定保存路径
    wb.save(path)
    return "保存成功"


test1 = read16excel("d:\\test1.xlsx")
test2 = write16excel(list1, "d:\\test2.xlsx", "sheet2")
print(test1)
print(test2)

 

posted on 2019-09-15 14:21  周围圆  阅读(412)  评论(0编辑  收藏  举报