我有一段代码,可以使用XlsxWriter创建一个名为file_A
的Excel文件。用户给我发了一个名为file_b
的excel文件,其中只有一个标签,名为tab_b
。他们希望tab_b
附加到file_A
。这个tab_b
包含了很多格式(我认为其中一些福尔斯“丰富”格式),我宁愿不硬编码到代码库中。
有没有办法将tab_b
作为某种tab对象上传到代码库中?然后,我可以将此选项卡附加到file_A
,所有格式和硬编码都将封装在选项卡对象中。
我们已经在我们的代码库中使用了XlsxWriter和openpyxl,但我不知道它们是否真的适合做这种事情。如果有必要,我对其他模块持开放态度,但它必须与Python兼容。
我们当前如何创建file_A
的示例代码如下所示:
writer = pd.ExcelWriter(output_file_path, engine='xlsxwriter')
someDataFrame.to_excel(writer, sheet_name='PreExisting_Tab')
writer.save()
理想情况下,我希望找出的是,下面的伪代码是否有真实的代码:
writer = pd.ExcelWriter(output_file_path, engine='xlsxwriter')
someDataFrame.to_excel(writer, sheet_name='PreExisting_Tab')
tab_b = readTabWithFormattingIntoPython("filePathToFile_B")
tab_b.to_Excel(writer,sheet_name='tab_b')
writer.save()
下面的屏幕截图描述了file_b中的tab_b。
更新感谢@DeepSpace让我注意到StyleFrame。它看起来很有希望,但我最初的概念验证尝试失败了。以下是我尝试的方法(它看起来与您示例中的代码非常相似,但不确定为什么会失败):
from StyleFrame import StyleFrame
writer = pd.ExcelWriter(output_file_path, engine='openpyxl')
tab_to_convert= StyleFrame.read_excel(file_B_file_path, read_style=True)
tab_to_convert.to_excel(writer)
writer.save()
上述代码的结果是,Excel文件被创建一个工作表,没有数据或格式从文件应该已经读取。在单元格A1中,它说“此工作表包含用于此工作簿的=FDS代码的FactSet XML数据。修改工作表的内容可能会损坏工作簿的FDS功能。”
不确定这是否是它不工作的原因,但我必须在创建编写器时指定“engine ='openpyxl'"。如果我没有指定,它会尝试使用XlsxWriter,但由于AttributeError而失败:“Workbook”对象没有属性“get_sheet_by_name”
第二次更新StyleFrame最终工作。请参阅@DeepSpace的回答中的评论。
2条答案
按热度按时间kzmpq1sx1#
StyleFrame(作为免责声明,我是作者之一)可以做到这一点。
gdx19jrr2#
关于 “此工作表包含用于此工作簿的=FDS代码的FactSet XML数据。修改工作表的内容可能会损坏工作簿的= FDS功能。" 错误,这是由excel FactSet插件添加的非常隐藏的工作表引起的。你可以查看非常隐藏的工作表,如果你在Excel中打开该文件,然后转到Excel。在项目概述中,您将看到一个名为__FDSCACHE__的文件。您可以删除此工作表或显式定义要打开的工作表,例如