Python整理多个Excel工作表数据到一个工作表中(二)

本文使用openpyxl实现将同一文件夹下的所有Excel文件中的数据整理到一个新的Excel工作表中,待整理的数据在Excel工作簿的所有sheet中,且具有相同的表头结构。

代码如下:

# -*- coding: utf-8 -*-
__author__ = 'Ceres'

import openpyxl
import os.path
import os

def main():
    rootdir = "./SortExcel"  # 提前将待整理的Excel文件放在SortExcel文件夹下
    files = os.listdir(rootdir)  # 获得文件夹下的所有Excel文件
    num = len(files)  # 获取文件数量
    finalWB = openpyxl.Workbook()  # 新建工作簿用来汇总数据
    sheet = finalWB.active
    sheet.title = "allcase"  # 修改工作表名字

    print("Reading data...Please wait")

    crow = 1  # 从新表的第一行开始填入数据
    k = 1
    for i in range(num): # 遍历每一个Excel文件
        path = os.path.join(rootdir, files[i])
        if os.path.isfile(path):
            if files[i] == "allcase.xlsx":
                continue
            else:
                wb = openpyxl.load_workbook(filename=path)
                wsheets = wb.get_sheet_names()
                sheetnum = len(wsheets)
                for s in range(sheetnum): # 遍历每一个worksheet
                    ws = wb.get_sheet_by_name(wsheets[s])  # 获取第s个sheet
                    end_row = ws.max_row
                    end_column = ws.max_column
                    start_row = 2  # 从第二行开始取数据(第一行是表头)
                    start_column = 1  # 从第一列开始取数据
                    if k == 1:  # 在新工作表的第一行填入表头
                        for j in range(start_column, end_column + 1):
                            sheet.cell(row=crow, column=j).value = ws.cell(row=1, column=j).value
                        crow += 1
                        k += 1
                    for m in range(start_row, end_row + 1):
                        for n in range(start_column, end_column + 1):
                            sheet.cell(row=crow, column=n).value = ws.cell(row=m, column=n).value
                        crow += 1
                print(files[i])

    print("Saving...")
    finalWB.save("./SortExcel/allcase.xlsx")  # 整理后的文件命名为allcase.xlsx,保存到SortExcel文件夹下
    print("Complete! Saved to ./SortExcel/allcase.xlsx")

main()

 

你可能感兴趣的:(Python)