Python读取众多Excel表格中的sheet并整合到一个新的Excel

  • 需求简介
    如果你想在一百个或者甚至更多个Excel中提取相同的sheet,并整合到一个新的Excel,该怎么做?
    我是想将所有要整理的表格放到与py脚本同文件夹里,进行操作。以下是个人的思路和方法:

    -!- coding: utf-8 -!-

    import os
    import xlrd
    import xlwt
    import pytest
    import xlsxwriter

    读取excel文件

    def get_excel(excel):
    f = xlrd.open_workbook(excel)
    return f

    获取excel中的所有sheet表

    def get_sheet(excel):
    return get_excel(excel).sheets()

    获取excal中的所有sheet表名

    def get_sheet_name(excel):
    return get_excel(excel).sheet_names()

    获取excel的sheet表个数

    def get_sheet_num(excel):
    n = 0
    sheets = get_sheet(excel)
    sheets_name = get_sheet_name(excel)
    # print(sheets_name)
    for i in sheets:
    n += 1
    return n

    获取excel每个sheet表的行数

    def get_sheet_rows(excel, sheetpage):
    table = get_sheet(excel)[sheetpage]
    return table.nrows

    读取excel文件对应sheet行内容

    def get_excel_file(excel, sheetpage):
    table = get_sheet(excel)[sheetpage]
    rows = table.nrows
    # print(rows)
    data_value = []
    for row in range(rows):
    # 返回该行中所有单元格数据组成的列表
    data = table.row_values(row)
    data_value.append(data)
    return data_value

    if name == 'main':
    # 定义合并后的目标文件
    end_excel = xlwt.Workbook(encoding='utf-8') # 新建工作簿
    sheet1 = end_excel.add_sheet("Test Coverage") # 新建sheet
    sheet2 = end_excel.add_sheet("Test Cases") # 新建sheet
    end_excel.save(r'./test.xlsx')

    current_path = os.path.dirname(os.path.abspath(file))
    excel = []
    for e in os.listdir(current_path):
    if not e.endswith("test.xlsx") and not e.endswith(".py"): # 排除掉此目录下的py文件和生成的结果文件
    excel.append(e)
    data_value1 = []
    data_value2 = []
    # print('excel:', excel)
    # 循环取得第n个excel 写第一个sheet
    sum1 = 0
    sum2 = 0
    for n in range(len(excel)): # 循环遍历Excel文件
    try:
    print(f"excel name ===== >{excel[n]}" )
    sheet_num = get_sheet_num(excel[n]) # 获取Excel文件夹里面有几个sheet 这里我是取得第几个sheet
    if sheet_num == 4: # 我所需要取的表的顺序一致 所以我就直接取了
    data1 = get_excel_file(excel[n], 2) # 也可以根据你想要的sheet名来取
    data2 = get_excel_file(excel[n], 3)
    if n != 0:
    del data1[0] # 第一个excel里面已经有了第一行的概括,所以接下来的copy中我们应该删除第一行的重复类容
    del data2[0]
    for m in range(len(data1)): # 对获取第一个内容进行重写操作
    newdata1 = data1[m] # 遍历获取所有的内容
    for k in range(len(newdata1)): # 遍历获取该内容里面的内容 并进行写入
    sheet1.write(sum1, k, newdata1[k]) # sum1 是行数 k是列数
    end_excel.save(r'./test.xlsx')
    sum1 += 1 # 行数写一次增加一次

    for p in range(len(data2)): # 同理对第二个内容进行写入
    newdata2 = data2[p]
    for k in range(len(newdata2)):
    sheet2.write(sum2, k, newdata2[k])
    end_excel.save(r'./test.xlsx')
    sum2 += 1
    print('转换中...')
    else:
    print(get_sheet_name(excel[n]), 'sheet表格缺少sheet') # 我读取的Excel默认是4个sheet 如果不对我可以将不符合要求的Excel找出来
    error = get_excel(excel[n])
    tips = 'sheet表格缺少sheet'
    path = os.getcwd() # 在当前路径下写入log
    name = 'error.txt'
    with open(name, "a") as f:
    f.write(str(error))
    f.write(tips + '\n')
    print('第' + str(n) + '个文件' + '转换成功')
    except Exception as e:
    print(f"excel name ===== >{excel[n]}") # 异常处理
    print(f"error is {str(e)}")

posted @ 2020-11-15 00:23  是超级可爱的小姚童鞋  阅读(1767)  评论(0)    收藏  举报