需求簡介
如果你想在一百個或者甚至更多個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)}")