使用Python批量合并多个工作簿中的同名工作表
生活随笔
收集整理的這篇文章主要介紹了
使用Python批量合并多个工作簿中的同名工作表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
批量合并多個工作簿中的同名工作表
使用Python的xlwings模塊批量合并多個工作簿中的同名工作表
import os import xlwings as xw import pandas as pd ''' 批量合并多個工作簿中的同名工作表 ''' # 給出要合并的工作表的文件路徑 file_path = r'E:\pythonExample\01\要合并的表' # 給出文件夾下所有文件的名稱 file_list = os.listdir(file_path) # 給出要合并的同名工作表的名稱 sheet_name = '實驗項目表' # 定義變量header,初始值為一個空對象,后面用于存放要合并的工作表中數據的列標題 header = None # 定義一個空列表,用于存放要合并的數據 all_data = [] # 合并記錄總分 sum_rows = 0 # 啟動Excel應用程序 app = xw.App(visible=True, add_book=False) '''1遍歷要合并Excel的文件夾下的文件名稱''' for i in file_list:if i.startswith('~$'):continue# 構造要合并的工作簿的文件路徑file_paths = os.path.join(file_path,i)# 打開要合并的工作簿workbook = app.books.open(file_paths)sheetnames = workbook.sheets'''2遍歷工作簿中的工作表'''for j in sheetnames:# 3判斷工作表的名稱是否為“實驗項目表”if j.name == sheet_name:# 4判斷變量header變量中是否已經存放了列標題if header == None:# 如果未存放,則讀取列標題并賦給變量headerheader = j['A1:W5'].value# 5讀取要合并工作表中的數據,用j['A6'].expand('table').value時中間有空格會中斷數據max_rows = j.used_range.last_cell.rowmax_columns = j.used_range.last_cell.column# 6獲取數據內容values = j[f'A6:W{max_rows}'].value'''7每一張表中檢查每一行數據,是否有整行為空的記錄,使用列表倒序方法刪除列表中元素的全為None值的空行解析:values = [n for n in values if any(n)]過慮:values = filter(lambda x : any(x),values)'''# for k in range(len(values)-1,-1,-1):# # 判斷每一條記錄(k中)的元素全為None時返回True,或者用all(i is None for i in k)# if not any(values[k]):# # 進行刪除行# values.remove(values[k])print(values)# 8合并多個工作簿中的同名工作表數據all_data = all_data + values# 可以最后總的數據進行過慮all_data = [n for n in all_data if any(n)]print(j) print(all_data) print('合并的記錄數all_data:%d ' %(len(all_data))) # 9新建工作簿,等同app.books.add() new_workbook = xw.Book() # 10在新建的工作簿中新建工作表,名稱為指定的合并的工作表名稱 new_worksheet = new_workbook.sheets.add(sheet_name) # 11將要合并的工作表的列標題復制寫入至新增工作表中 new_worksheet['A1'].value = header # 12將合并后的工作表數據內容復制寫入到新增工作表中 new_worksheet['A6'].value = all_data # 13根據合并后數據內容自動調整新增工作表的行高和列寬,autofie(axis=None), '''格式樣式設置''' """合并單元格""" # 合并單元格 new_worksheet.range('A1:W1').merge() new_worksheet.range('A2:W2').merge() new_worksheet.range('A3:W3').merge() """設置邊框, 與可以用for循環寫: # 遍歷每一個單元格,設置邊框線for cell in j['A1'].expand('table'):# 對每一個單元的四周(7,8,9,10)畫線,數字表示四邊代號for b in range(7, 12):# 設置單元格的邊框線型cell.api.Borders(b).LineStyle = 1# 設置單元格的邊框粗細cell.api.Borders(b).Weight = 2 """ # 邊框線: Borders(5) 單元格內從左上角 到 右下角。 # new_worksheet.range(f'A4:W{len(all_data)}').api.Borders(5).LineStyle = 1 # new_worksheet.range(f'A4:W{len(all_data)}').api.Borders(5).Weight = 3 # Borders(6) 單元格內從左下角 到 右上角。# Borders(7) 左邊框,LineStyle = 2 虛線。 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(7).LineStyle = 1 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(7).Weight = 3 # Borders(8) 頂部框,LineStyle = 5 雙點劃線。 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(8).LineStyle = 1 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(8).Weight = 3 # Borders(9) 底部邊框,LineStyle = 1 直線。 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(9).LineStyle = 1 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(9).Weight = 3 # Borders(10) 右邊框,LineStyle = 4 點劃線。 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(10).LineStyle = 1 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(10).Weight = 3 # Borders(11) 內部垂直邊線。 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(11).LineStyle = 1 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(11).Weight = 3 # Borders(12) 內部水平邊線。 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(12).LineStyle = 1 new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(12).Weight = 3# 參數若設置為'rows'或‘r’,表示自動適應調整行高;若設置為'columns'或'c',表示自動適應調整列寬 new_worksheet.autofit() """設置單元格大小""" # new_workbook.autofit() # 自動調整單元格大小。注:此方法是在單元格寫入內容后,再使用,才有效。 # new_workbook.range(1, 4).column_width = 5 # 設置第4列 列寬。(1,4)為第1行第4列的單元格 new_worksheet.range('A1').row_height = 180 # 設置第1行 行高 """設置單元格 字體格式""" new_worksheet.range('A2:A3').api.HorizontalAlignment = -4108 # -4108 水平居中。 -4131 靠左,-4152 靠右。 new_worksheet.range('A2:A3').api.VerticalAlignment = -4108 # -4108 垂直居中(默認)。 -4160 靠上,-4107 靠下, -4130 自動換行對齊。 new_worksheet.range('A2').api.Font.Name = "宋體" # 設置字體 new_worksheet.range('A2').api.Font.Size = 20 # 設置字體的大小。 new_worksheet.range('A2').api.Font.Bold = True # 設置為粗體。# 保存工作簿 new_workbook.save(r'E:\pythonExample\01\匯總實驗項目表.xlsx') new_workbook.close() print("完成合并") app.quit()總結
以上是生活随笔為你收集整理的使用Python批量合并多个工作簿中的同名工作表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位模块概念
- 下一篇: 网络:CGI程序制作