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)}")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM