【问题标题】:Merge multiple excel files and keep formatting (Python)合并多个excel文件并保持格式(Python)
【发布时间】:2020-06-17 21:21:03
【问题描述】:

我有简单的代码来合并 excel 文件。但它不断丢失格式。有什么建议吗?

感谢您的回复!

import numpy as np
import pandas as pd
import openpyxl
import os
import glob

all_names = []

for x in os.listdir(r'C:\<directory to excel files>'):
    if x.endswith(".xlsx"):
        all_names.append(x[:-5])
        print(all_names)

all_data = pd.DataFrame()
for f in glob.glob("*.xlsx"):
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)

appended_df = pd.concat((all_data), keys=(all_names))
appended_df.to_excel(r"C:\<directory for merged file>")

【问题讨论】:

    标签: python pandas merge formatting


    【解决方案1】:

    一种保留格式以将 DF 附加到现有 Excel 文件的方法,有点像这样。

    def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None,
                           truncate_sheet=False,
                           **to_excel_kwargs):
    
        # ignore [engine] parameter if it was passed
        if 'engine' in to_excel_kwargs:
            to_excel_kwargs.pop('engine')
    
        writer = pd.ExcelWriter(filename, engine='openpyxl')
    
        try:
            # try to open an existing workbook
            writer.book = load_workbook(filename)
    
            # get the last row in the existing Excel sheet
            # if it was not specified explicitly
            if startrow is None and sheet_name in writer.book.sheetnames:
                startrow = writer.book[sheet_name].max_row
    
            # truncate sheet
            if truncate_sheet and sheet_name in writer.book.sheetnames:
                # index of [sheet_name] sheet
                idx = writer.book.sheetnames.index(sheet_name)
                # remove [sheet_name]
                writer.book.remove(writer.book.worksheets[idx])
                # create an empty sheet [sheet_name] using old index
                writer.book.create_sheet(sheet_name, idx)
    
            # copy existing sheets
            writer.sheets = {ws.title: ws for ws in writer.book.worksheets}
        except FileNotFoundError:
            # file does not exist yet, we will create it
            pass
    
        if startrow is None:
            startrow = 0
    
        # write out the new sheet
        df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs)
    
        # save the workbook
        writer.save()
    

    【讨论】:

    • 我不断收到错误:writer = pd.ExcelWriter(filename, engine='openpyxl') 它说 抽象类 'ExcelWriter' 实例化了抽象方法
    • 似乎是 pylint 的一个已知错误。 github.com/PyCQA/pylint/issues/3060 尝试使用 pylint 指令将其设置在上下文管理器中,就像他们建议的那样:with pd.ExcelWriter(filename, engine='openpyxl') as writer: #pylint: disable=abstract-class-instantiated
    • 好的,没有错误了,但它没有显示任何格式..
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多