-
需求簡介
如果你想在一百個或者甚至更多個Excel中提取相同的sheet,並整合到一個新的Excel,該怎么做?
我是想將所有要整理的表格放到與py腳本同文件夾里,進行操作。以下是個人的思路和方法:# -!- coding: utf-8 -!- import os import xlrd import xlwt import pytest import xlsxwriter # 讀取excel文件 def get_excel(excel): f = xlrd.open_workbook(excel) return f # 獲取excel中的所有sheet表 def get_sheet(excel): return get_excel(excel).sheets() # 獲取excal中的所有sheet表名 def get_sheet_name(excel): return get_excel(excel).sheet_names() # 獲取excel的sheet表個數 def get_sheet_num(excel): n = 0 sheets = get_sheet(excel) sheets_name = get_sheet_name(excel) # print(sheets_name) for i in sheets: n += 1 return n # 獲取excel每個sheet表的行數 def get_sheet_rows(excel, sheetpage): table = get_sheet(excel)[sheetpage] return table.nrows # 讀取excel文件對應sheet行內容 def get_excel_file(excel, sheetpage): table = get_sheet(excel)[sheetpage] rows = table.nrows # print(rows) data_value = [] for row in range(rows): # 返回該行中所有單元格數據組成的列表 data = table.row_values(row) data_value.append(data) return data_value if __name__ == '__main__': # 定義合並后的目標文件 end_excel = xlwt.Workbook(encoding='utf-8') # 新建工作簿 sheet1 = end_excel.add_sheet("Test Coverage") # 新建sheet sheet2 = end_excel.add_sheet("Test Cases") # 新建sheet end_excel.save(r'./test.xlsx') current_path = os.path.dirname(os.path.abspath(__file__)) excel = [] for e in os.listdir(current_path): if not e.endswith("test.xlsx") and not e.endswith(".py"): # 排除掉此目錄下的py文件和生成的結果文件 excel.append(e) data_value1 = [] data_value2 = [] # print('excel:', excel) # 循環取得第n個excel 寫第一個sheet sum1 = 0 sum2 = 0 for n in range(len(excel)): # 循環遍歷Excel文件 try: print(f"excel name ===== >{excel[n]}" ) sheet_num = get_sheet_num(excel[n]) # 獲取Excel文件夾里面有幾個sheet 這里我是取得第幾個sheet if sheet_num == 4: # 我所需要取的表的順序一致 所以我就直接取了 data1 = get_excel_file(excel[n], 2) # 也可以根據你想要的sheet名來取 data2 = get_excel_file(excel[n], 3) if n != 0: del data1[0] # 第一個excel里面已經有了第一行的概括,所以接下來的copy中我們應該刪除第一行的重復類容 del data2[0] for m in range(len(data1)): # 對獲取第一個內容進行重寫操作 newdata1 = data1[m] # 遍歷獲取所有的內容 for k in range(len(newdata1)): # 遍歷獲取該內容里面的內容 並進行寫入 sheet1.write(sum1, k, newdata1[k]) # sum1 是行數 k是列數 end_excel.save(r'./test.xlsx') sum1 += 1 # 行數寫一次增加一次 for p in range(len(data2)): # 同理對第二個內容進行寫入 newdata2 = data2[p] for k in range(len(newdata2)): sheet2.write(sum2, k, newdata2[k]) end_excel.save(r'./test.xlsx') sum2 += 1 print('轉換中...') else: print(get_sheet_name(excel[n]), 'sheet表格缺少sheet') # 我讀取的Excel默認是4個sheet 如果不對我可以將不符合要求的Excel找出來 error = get_excel(excel[n]) tips = 'sheet表格缺少sheet' path = os.getcwd() # 在當前路徑下寫入log name = 'error.txt' with open(name, "a") as f: f.write(str(error)) f.write(tips + '\n') print('第' + str(n) + '個文件' + '轉換成功') except Exception as e: print(f"excel name ===== >{excel[n]}") # 異常處理 print(f"error is {str(e)}")