python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并
一、前言
大家好,我是崔艷飛。前兩天給大家分享了Python自動化文章:手把手教你利用Python輕松拆分Excel為多個CSV文件,而后在Python進階交流群里邊有讀者遇到一個問題,他有很多個Excel表格,他需要對這些Excel文件進行合并。
誠然,一個一個打開復制粘貼固然可行,但是該方法費時費力,還容易出錯,幾個文件還可以手動處理,要是幾十個甚至上百個,你就抓瞎了,不過這問題對Python來說,so easy,一起來看看吧!
二、項目目標
用Python實現多Excel、多Sheet的合并處理。
三、項目準備
軟件:PyCharm
需要的庫:pandas, xlrd,os
四、項目分析
1)如何選擇要合并的Excel文件?
利用os,獲取所有要合并的Excel文件。
2)如何選擇要合并的Sheet?
利用xlrd庫進行Excel讀取,獲取要合并的Sheet名。
3)如何合并?
利用pandas庫,對所有Sheet名逐一循環打開,通過concat()進行數據追加合并即可。
4)如何保存文件?
利用to_excel保存數據,得到最終合并后的目標文件。
五、項目實現
1、第一步導入需要的庫
import?pandasaspd
import?xlrd
import?os
2、第二步選擇要合并的Excel文件
#要合并文件路徑
path="D:/b/"
#獲取文件夾下所有EXCEL名
xlsx_names?=?[x?forxinos.listdir(path)?if?x.endswith(".xlsx")]
3、第三步選擇要合并的Sheet
#?獲取第一個EXCEL名
xlsx_names1?=?xlsx_names[0]
aa?=?path?+?xlsx_names1
#打開第一個EXCEL
first_file_fh=xlrd.open_workbook(aa)
#?獲取SHEET名
first_file_sheet=first_file_fh.sheets()
4、第四步對Sheet內容進行循環合并
#按SHEET名循環
forsheet_nameinsheet_names:
df?=?None
#?按EXCEL名循環
forxlsx_nameinxlsx_names:
sheet_na?=?pd.ExcelFile(path?+?xlsx_name).sheet_names
if?sheet_name?insheet_na:
#print(sheet_name)
_df?=?pd.read_excel(path?+?xlsx_name,?sheet_name=sheet_name,header=None)
if?df?isNone:
df?=?_df
else:
df?=?pd.concat([df,?_df],?ignore_index=True)
else:continue
5、第五步保存合并后的文件
df.to_excel(excel_writer=writer,?sheet_name=sheet_name,?encoding="utf-8",index=False)
print(sheet_name?+?"??保存成功!共%d個,第%d個。"%?(len(sheet_names),num))
num?+=?1
writer.save()
writer.close()
六、效果展示
1、處理前Excel數據:
2、運行進度提示:
3、合并后的結果:
七、總結
本文介紹了如何利用Python對多個Excel文件、多Sheet進行合并處理,減少了很多復制粘貼的麻煩,省時省力,還不容易出錯,代碼不多,循環追加有點繞,想想也就明白了,不懂的隨時留言提問,大家一起學習進步。
有想法的小伙伴還可以將文章中的代碼進行打包,做成一個exe可執行的小軟件,包裝好發給別人使用,也可以賺點小費噢,關于打包的教程這里不再贅述,歡迎前往:三個你必須要記住的Pyinstaller打包命令——利用Python實現打包exe。
八、彩蛋
下面兩份代碼是群內小伙伴提供了,小編也自行測試了下,親測有效,歡迎大家積極嘗試噢!
來自群友Jayson的代碼:
#?-*-?coding:?utf-8?-*-
#?@Author:?hebe
#?@Date:???2020-04-18?18:31:03
#?@LastModifiedby:???hebe
#?@LastModifiedtime:?2020-04-18?19:40:48
import?os
import?glob
import?openpyxl
def?merge_xlsx_files(xlsx_files):
wb?=?openpyxl.load_workbook(xlsx_files[0])
ws?=?wb.active
ws.title?=?"merged?result"
forfilenameinxlsx_files[1:]:
workbook?=?openpyxl.load_workbook(filename)
sheet?=?workbook.active
forrowinsheet.iter_rows(min_row=1):
values=?[cell.valueforcellinrow]
ws.append(values)
returnwb
#path?isvery?important?here?,?musttrue.
def?get_all_xlsx_files(path):
xlsx_files?=?glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\',?'*.xlsx'))
sorted(xlsx_files,?key=str.lower)
returnxlsx_files
def?main():
xlsx_files?=?get_all_xlsx_files(os.path.expanduser('~lmx'))
wb?=?merge_xlsx_files(xlsx_files)
wb.save('merged_form.xlsx')
if?__name__?==?'__main__':
main()
print("all?excel?append?OK!")
來自好友劉早起的代碼:
#?-*-?coding:?utf-8?-*-
fromopenpyxl?import?load_workbook,?Workbook
import?glob
path?=?"C:\\Users\\pdcfi\\Desktop\\excel\\"
new_workbook?=?Workbook()
new_sheet?=?new_workbook.active
#?用flag變量明確新表是否已經添加了表頭,只要添加過一次就無須重復再添加
flag?=?0
forfileinglob.glob(path?+'/*.xlsx'):
workbook?=?load_workbook(file)
sheet?=?workbook.active
coloum_A?=?sheet['A']
row_lst?=?[]
forcellincoloum_A:
if?cell:
print(cell.row)
row_lst.append(cell.row)
if?notflag:
header?=?sheet[1]
header_lst?=?[]
forcellinheader:
header_lst.append(cell.value)
new_sheet.append(header_lst)
flag?=?1
forrowinrow_lst:
data_lst?=?[]
forcellinsheet[row]:
data_lst.append(cell.value)
new_sheet.append(data_lst)
new_workbook.save(path?+?'/'+'符合篩選條件的新表.xlsx')
來自群友Engineer的代碼:
import?tkinterastk
fromtkinter?import?filedialog
import?os
import?pandas?aspd
import?glob
root?=?tk.Tk()
root.withdraw()
#?選擇文件夾位置
filelocation?=?os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))
lst?=?[]
#?讀取文件夾下所有文件(xls和xlsx都讀取)
foriinglob.glob(filelocation?+"\\\\"?+?"*.*"):
if?os.path.splitext(i)[1]?in[".xls",".xlsx"]:
lst.append(pd.read_excel(i))
#?保存合并后的excel文件
writer?=?pd.ExcelWriter(filedialog.asksaveasfilename(title="保存",?initialdir=filelocation,?defaultextension="xlsx",
filetypes=[("Excel?工作簿","*.xlsx"),
("Excel?97-2003?工作簿","*.xls")]))
pd.concat(lst).to_excel(writer,?'all',index=False)
writer.save()
print('\n%d個文件已經合并成功!'%?len(lst))
當然了,實現本文功能不僅僅限于上面提及的3種方式,使用pandas也是可以做到的,如果你還有其他方法,歡迎交個朋友一起學習交流!
【編輯推薦】
【責任編輯:姜華 TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程期末总结
- 下一篇: 10到十分精彩的智力题,你能过关几道?