python小白學(xué)了一點(diǎn)入門之后,覺(jué)得可以嘗試著寫(xiě)這么一個(gè)小應(yīng)用:工作中有時(shí)候會(huì)下發(fā)收集表格,后續(xù)需要匯總成一個(gè),下面要解決的就是怎么樣將多個(gè)excel文件的內(nèi)容合并成一個(gè)的問(wèn)題。
一 安裝相關(guān)模塊
這里用到的是openpyxl模塊。安裝方式是通過(guò)pycharm安裝蛙吏。也可以通過(guò)其他方式安裝,這里不贅述鞋吉。
二 寫(xiě)程序
- 新建兩個(gè)測(cè)試excel文件:combat1.xlsx combat.xlsx鸦做。里面可以隨意填寫(xiě)一些內(nèi)容。
- 新建用于存放合并結(jié)果的excel文件:f_combat.xlsx
- 在1 2步相同文件夾下新建python文件:combat.py
編寫(xiě)思路:
- 打開(kāi)各個(gè)excel文件谓着,打開(kāi)sheet頁(yè)
- 打開(kāi)存放結(jié)果的excel文件泼诱,清空內(nèi)容
- 逐行讀取各個(gè)excel文件的內(nèi)容,寫(xiě)入結(jié)果文件赊锚。
結(jié)果如下:
from openpyxl import Workbook,load_workbook
wb1=load_workbook("combat1.xlsx") #打開(kāi)各個(gè)excel文件治筒,打開(kāi)sheet頁(yè)
wb2=load_workbook("combat2.xlsx")
sheet1=wb1["Sheet1"]
sheet2=wb2["Sheet1"]
wb=load_workbook("f_combat.xlsx")
del wb["Sheet1"] #打開(kāi)存放結(jié)果的excel文件,清空內(nèi)容
sheet=wb.create_sheet("Sheet1")
wb.save("f_combat.xlsx")
for row in sheet1: #讀第一個(gè)Excel文件舷蒲,把內(nèi)容存放到一個(gè)列表里面
null1 = []
for cell in row:
a=cell.value
null1.append(a)
sheet.append(null1) #sheet.append只能傳入list等耸袜,所以轉(zhuǎn)了一步list寫(xiě)入
for row in sheet2:
null2 = []
for cell in row:
a=cell.value
null2.append(a)
sheet.append(null2)
wb.save("f_combat.xlsx")
wb.close()
三 優(yōu)化程序
以上代碼里面顯然有不少重復(fù)的部分,優(yōu)化思路是改成函數(shù)牲平,支持多個(gè)excel堤框。
參數(shù)格式是字典:{"excel名":"sheet名"}
結(jié)果如下:
def combat(filename):
from openpyxl import Workbook,load_workbook
#定義要寫(xiě)入的結(jié)果xlsx文件
wb=load_workbook("f_combat.xlsx")
del wb["Sheet1"] #打開(kāi)存放結(jié)果的excel文件,清空內(nèi)容
sheet=wb.create_sheet("Sheet1")
wb.save("f_combat.xlsx")
for k in filename:
wbx=load_workbook(k)
sheetx=wbx[filename[k]]
for row in sheetx:
null1 = []
for cell in row:
a = cell.value
null1.append(a)
sheet.append(null1) #sheet.append只能傳入list等,所以轉(zhuǎn)了一步list寫(xiě)入
wb.save("f_combat.xlsx")
wb.close()
# 合并 兩個(gè)測(cè)試文件的寫(xiě)法:
combat({"combat1.xlsx":"Sheet1","combat2.xlsx":"Sheet1"})
四 測(cè)試結(jié)果
測(cè)試成功胰锌。不過(guò)實(shí)際應(yīng)用會(huì)有標(biāo)題行重復(fù)的問(wèn)題,在結(jié)果文件里面篩選一下刪除就好藐窄,