天天看點

python 讀excel中一個表_Python讀取衆多Excel表格中的sheet并整合到一個新的Excel

需求簡介

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