【问题标题】:How to add an empty Worksheet into an existing Workbook using Pandas ExcelWriter如何使用 Pandas ExcelWriter 将空工作表添加到现有工作簿中
【发布时间】:2019-10-23 04:00:08
【问题描述】:

我正在尝试使用 python xlsxwriter 将一个空的 Excel 工作表添加到现有的 Excel 文件中。

如下设置公式效果很好。

workbook = xlsxwriter.Workbook(file_name)
worksheet_cover = workbook.add_worksheet("Cover")
Output4 = workbook
Output4.close()

但是,一旦我尝试在 Excel 中添加更多带有数据框的工作表,它就会覆盖以前的 excel:

with pd.ExcelWriter('Luther_April_Output4.xlsx') as writer:
    data_DifferingRates.to_excel(writer, sheet_name='Differing Rates')
    data_DifferingMonthorYear.to_excel(writer, sheet_name='Differing Month or Year')
    data_DoubleEntries.to_excel(writer, sheet_name='Double Entries') 

我应该如何编写代码,以便我可以将空工作表和现有数据框添加到现有的 excel 文件中。

或者,一旦我生成了 Excel 文件,回答如何切换引擎会很有帮助...

感谢您的帮助!

【问题讨论】:

    标签: python excel pandas xlsxwriter


    【解决方案1】:

    如果您没有被强制使用xlsxwriter,请尝试使用openpyxl。只需将“openpyxl”作为 pandas 内置 ExcelWriter 类的引擎传递。我曾在why this works 上问过一个问题。这是有用的代码。它适用于pd.to_excel() 的语法,并且不会覆盖您已经存在的工作表。

    from openpyxl import load_workbook
    import pandas as pd
    
    book = load_workbook(file_name)
    writer = pd.ExcelWriter(file_name, engine='openpyxl')
    writer.book = book
    data_DifferingRates.to_excel(writer, sheet_name='Differing Rates')
    data_DifferingMonthorYear.to_excel(writer, sheet_name='Differing Month or Year')
    data_DoubleEntries.to_excel(writer, sheet_name='Double Entries') 
    
    writer.save()
    

    【讨论】:

    • 嗨 MattR 非常感谢您的建议。因为我可以看到 openpyxl 还允许我将单元格格式、广告 cmets 和广告公式更改为 excel 文件。那将是我需要的??!但是由于我还想让引擎从“xlsx”和“xlsm”中读取命令,所以这个链接中的代码似乎最适合我。 stackoverflow.com/questions/45220247/…
    • 但是你能解释一下第 4 行以后的代码吗?! “支持的扩展”命令似乎是正确的,但我不明白为什么以及是否还需要其余的... class _OpenpyxlWriter(ExcelWriter): engine = 'openpyxl' supported_extensions = ('.xlsx', '. xlsm') def __init__(self, path, engine=None, **engine_kwargs): # 使用 openpyxl 模块作为 Excel 编写器。 from openpyxl.workbook import Workbook super(_OpenpyxlWriter, self).__init__(path, **engine_kwargs) self.book = Workbook()
    • @phi.lue - 如果此答案或其他答案已解决您发布的 this 问题,请投票或标记为已回答。至于您在 cmets 中留下的问题,这是一个完全不同的问题,需要您发布另一个问题 :)
    • @phi.lue 另一个答案(您所指的)只是突出显示pandas.ExcelWriter 类的源代码,它是其他i 的包装器/o Excel 库。您不直接实现该代码。
    【解决方案2】:

    您可以使用 pandas.ExcelWriter 和可选的 mode='a' 参数来追加到现有的 Excel 工作簿。

    您还可以附加到现有的 Excel 文件:

    >>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer:`
    ...     df.to_excel(writer, sheet_name='Sheet3')`
    

    但不幸的是,这需要使用不同的引擎,因为您观察到ExcelWriter 不支持可选的mode='a'(附加)。如果您尝试将此参数传递给构造函数,it raises an error

    因此,您将需要使用不同的引擎来执行附加操作,例如 openpyxl。您需要确保已安装该软件包,否则您将收到“未找到模块”错误。我已经使用openpyxl 作为引擎进行了测试,它能够将新的工作表附加到现有工作簿:

    with pd.ExcelWriter(engine='openpyxl', path='Luther_April_Output4.xlsx', mode='a') as writer:
        data_DifferingRates.to_excel(writer, sheet_name='Differing Rates')
        data_DifferingMonthorYear.to_excel(writer, sheet_name='Differing Month or Year')
        data_DoubleEntries.to_excel(writer, sheet_name='Double Entries') 
    

    【讨论】:

    • 您好,感谢您的建议。我以前尝试过这个技巧。足够愚蠢的引擎“xlsxwriter”不会让我使用这个功能“模式=“a”。您是否知道如何在将 excel 写入代码的一半时更改该引擎?到目前为止,我一直在使用 xlsxwriter,因为它拥有最广泛的文献和大多数命令,例如格式化单元格等...
    • @phi.lue 不幸的是,ExcelWriter 似乎不支持追加模式 :( 但请参阅我的答案的修订版,以改用 openpyxl 引擎。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多