使用 Python 合并多個格式一緻的 Excel 檔案
一 問題描述
最近朋友在工作中遇到這樣一個問題,她每天都要處理如下一批 Excel 表格:每個表格的都隻有一個 sheet,表格的前兩行為表格标題及表頭,表格的最後一行是相關人員簽字。最終目标是将每個表格的内容合并到一個 Excel 表格中,使之成為一張表格。在她未咨詢我之前,每天複制粘貼這一類操作占用了她絕大部分時間。表格樣式如下:
二 需求分析
根據她的描述,最終需求應該是這樣的:在這一批表格中選取任意一個表格的前兩行作為新表格的标題與表頭,将這兩行内容以嵌套清單的形式插入一個名為 data 空清單中。取每張表格的第3至倒數第二行,剔除空白行的内容。并将所有表格的内容以子清單的方式依次插入 data 清單中。任取一表格的最後一行以子清單的方式插入 data 清單中。最後将 data 清單的内容寫入一個新的 Excel 表格中。
三 查閱資料
通過幾分鐘的上網查詢,得出以下結論:
- 3.1 通過 xlrd 和 xlsxwriter 子產品即可解決次需求;
- 3.2 之是以使用 xlrd 和 xlsxwriter 是因為: xlrd擅長讀取 Excel 檔案,不适合寫入,用 xlsxwriter 來進行大規模寫入 Excel 表格不會出現報錯。
四 編碼
一切以解決目前問題為向導,說幹就幹。 coding ... ...
# -*- coding:utf-8 -*-
import os, xlrd, xlsxwriter
source_dir = r'input'
new_execl = "All in one.xlsx"
raw_excels = os.listdir(source_dir)
keyword = "油站經理" # 除包括此關鍵字的行均插入
data = []
filename = os.path.join(source_dir, raw_excels[0])
wb = xlrd.open_workbook(filename)
sheet = wb.sheets()[0]
data.append(sheet.row_values(0))
data.append(sheet.row_values(1))
for excel in raw_excels:
filename = os.path.join(source_dir, excel)
wb = xlrd.open_workbook(filename)
sheet = wb.sheets()[0]
for row_num in range(2, sheet.nrows):
row_values = [str(i) for i in sheet.row_values(row_num)]
if len(''.join(row_values)) and (keyword not in ''.join(row_values)):
data.append(sheet.row_values(row_num))
data.append(sheet.row_values(sheet.nrows-1))
new_wb = xlsxwriter.Workbook(new_execl)
worksheet = new_wb.add_worksheet()
font = new_wb.add_format({"font_size":11})
for i in range(len(data)):
for j in range(len(data[i])):
worksheet.write(i, j, data[i][j], font)
new_wb.close()
半小時後,大功告成!
五 使用說明
- 5.1 下載下傳安裝 Python3.X(具體安裝步驟自己查一下);
- 5.2 安裝 xlrd 和 xlsxwriter 子產品,參考指令:
。開始此步驟之前可能需要先更新pip,具體更新指令系統會提示,複制粘貼即可;pip install xlrd xlsxwriter
- 5.3 建立一個名為 input 的檔案夾,将需要合并的檔案複制到這個檔案夾下;
- 5.4 把以上代碼複制以 excels_merge.py 的檔案名儲存在與 input 檔案夾同級别的檔案夾中,輕按兩下滑鼠稍後即可。如果沒有關聯打開方式,那麼就在資料總管的位址欄輸入“cmd”,在打開的指令視窗輸入:
。生成的 All in one.xlsx 即為合并後的新 Excel 檔案。python excels_merge.py
六 總結
- 6.1
這一部分代碼實作了将清單内的元素統一轉化為字元串,主要是為了下一行代碼實作将清單轉換為字元串;[str(i) for i in sheet.row_values(row_num)]
- 6.3 此的腳本不對源 Excel 檔案進行任何操作,可是放心使用;
- 6.4 以上腳本就是随手一寫,都沒有優化,以後如果資料量太大估計會考慮優化,希望大家多提意見或建議;
- 6.5 源代碼可以通路我的同名 CSDN 部落格及 GitHub 擷取。