Pythonは複数のExcelワークシートデータを1つのワークシートに整理する(2)

2096 ワード

この文書では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()