1. 程式人生 > 實用技巧 >python批量彙總工作簿和工作表

python批量彙總工作簿和工作表

1、彙總一個工作簿中多個工作表

基本邏輯:

(1)新建一個列表儲存內容

(2)開啟第一張表,統計表有多少行

(3)將表的資料一行一行彙總在一起

(4)將彙總的內容儲存到工作表中

import xlrd
# XlsxWriter只能建立新檔案。它無法讀取或修改現有檔案。
import xlsxwriter
import os

# 開啟工作簿
wb = xlrd.open_workbook('D:/test01/年齡表.xlsx')
# 讀取工作簿的sheet名
sheets = wb.sheet_names()

# 統計工作簿彙總表的個數
nsheets = len(sheets)

# 每個工作表有多少行
for nsht in range(nsheets): table = wb.sheets()[nsht] nrows = table.nrows print(nrows) total = [['姓名', '年齡', '來源']] # 檢視彙總表裡面有多少欄位 label = table.row_values(0) item1 = label.index("姓名") item2 = label.index("年齡") for nsht in range(nsheets): table = wb.sheets()[nsht] nrows = table.nrows
for nr in range(1, nrows): item = [table.row_values(nr)[item1], table.row_values(nr)[item2]] item.append(sheets[nsht]) total.append(item) # 新建一個工作簿 workbook = xlsxwriter.Workbook("D:/test01/年齡彙總test.xlsx") worksheet = workbook.add_worksheet() # 新建一個工作表,命名為sheet for i in range(len(total)):
for j in range(len(total[i])): worksheet.write(i, j, total[i][j]) workbook.close()

2、彙總多個工作簿的內容

資料說明:

1)excel資料夾中有兩個檔案,2018.xlsx 和2019.xls

2)2019的檔案表頭在第二行,2018的表頭在第一行

3)需要的欄位不在同一列,並且除了需要的欄位可能還有其它不相關的內容

基本步驟:

(1)檢視有幾個工作簿

(2)開啟第一個工作簿,統計表中內容

(3)將工作簿的內容彙總

(4)將彙總的內容儲存到工作表中

import xlrd
import xlsxwriter
import os
# 讀取資料夾中的檔名
filelist = os.listdir('.\excel資料夾')
print(filelist)

# 新建一個列表儲存彙總的資料,定義好列名
# 此處也可以用dataframe來新建和處理
total = [['部門名稱', '招考職位', '職位簡介', '招考人數', '專業', '學歷','來源']]


# 要整理的excel表格 xls、xlsx檔案所在資料夾
# 新建一個list存放xlsx檔案(包含路徑)
collect_xlsx = []

# 將excel檔案選出來
for file in filelist:
    fileExpand = os.path.splitext(file)[1]
#     print(fileExpand)
    if (fileExpand == '.xlsx')|(fileExpand == '.xls'):
        # 絕對路徑和相對路徑
        file_path = 'D:/工作文件/03-資料分析分享/excel資料夾/' + file
#         file_path =  "./excel資料夾/" + file
        collect_xlsx.append(file_path)
#     elif fileExpand == '.xls':
#         collect_xlsx.append(file)

for file_xlsx in collect_xlsx:
        if file_xlsx == "D:/工作文件/03-資料分析分享/excel資料夾/2019.xls":
            wb = xlrd.open_workbook(file_xlsx)
            sheets = wb.sheet_names()
            nsheets = len(sheets)

            for nsht in range(nsheets):
                table = wb.sheets()[nsht]
                nrows = table.nrows

                # 提取標籤,2019年的資料從第二行開始提取
                label = table.row_values(1)
                # 將需要的欄位通過label提取出來
                item1 = label.index("部門名稱")
                item2 = label.index("招考職位")
                item3 = label.index("職位簡介")
                item4 = label.index("招考人數")
                item5 = label.index("專業")
                item6 = label.index("學歷")

                for nr in range(2, nrows):
                    item = [table.row_values(i)[item1], table.row_values(i)[item2], table.row_values(i)[item3],\
                            table.row_values(i)[item4], table.row_values(i)[item5], table.row_values(i)[item6]]
                    item.append(file_xlsx + sheets[nsht])
                    total.append(item)
                        
        else:      
            wb = xlrd.open_workbook(file_xlsx)
            sheets = wb.sheet_names()
            nsheets = len(sheets)

            for nsht in range(nsheets):
                table = wb.sheets()[nsht]
                nrows = table.nrows

                # 提取標籤,2018年的資料從第一行開始提取,2018的部門名稱叫做招錄機關
                label = table.row_values(0)
                # 將需要的欄位通過label提取出來
                item1 = label.index("招錄機關")
                item2 = label.index("招考職位")
                item3 = label.index("職位簡介")
                item4 = label.index("招考人數")
                item5 = label.index("專業")
                item6 = label.index("學歷")

                for nr in range(1, nrows):
                    item = [table.row_values(i)[item1], table.row_values(i)[item2], table.row_values(i)[item3],\
                            table.row_values(i)[item4], table.row_values(i)[item5], table.row_values(i)[item6]]
                    item.append(file_xlsx + sheets[nsht])
                    total.append(item)

# 新建一個工作簿
workbook = xlsxwriter.Workbook("total_test.xlsx")
worksheet = workbook.add_worksheet()

for i in range(len(total)):
    for j in range(len(total[i])):
        worksheet.write(i, j, total[i][j])
workbook.close()