我有使用XlsxWriter创建名为file_A
的excel文件的代码。用户向我发送了一个名为file_b
的excel文件,该文件只有一个选项卡,名为tab_b
。他们希望将tab_b
附加到file_A
上。 tab_b
包含许多格式(我相信其中一些属于“丰富”格式”),我宁愿不必将其硬编码到代码库中。
是否可以将tab_b
作为某种选项卡对象上传到代码库中?然后,我可以将此标签附加到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()
更新:感谢@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'
第2次更新 StyleFrame最终开始工作。请参阅下面@DeepSpace的答案中的评论。
答案 0 :(得分:1)
StyleFrame(作为免责声明,我是作者之一)可以做到这一点。
from StyleFrame import StyleFrame
writer = pd.ExcelWriter(output_file_path)
someDataFrame.to_excel(writer, sheet_name='PreExisting_Tab')
tab_b = StyleFrame.read_excel("filePathToFile_B", read_style=True)
tab_b.to_Excel(writer, sheet_name='tab_b')
writer.save()
两个警告:
到目前为止,StyleFrame仅支持openpyxl
<= 2.2.5,这已经很老了。我计划在不久的将来添加对较新版本的支持
不是所有样式元素都受支持,但大多数(如果不是全部)基本样式元素都受支持。