可以将Excel选项卡读入代码并以格式写回同一选项卡

时间:2018-11-19 17:58:06

标签: python excel openpyxl xlsxwriter styleframe

我有使用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()

下面的屏幕快照描述了file_b内部的tab_b。
A screenshot of a mockup of the excel tab they want appended is pictured here:

更新:感谢@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的答案中的评论。

1 个答案:

答案 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,这已经很老了。我计划在不久的将来添加对较新版本的支持

  • 不是所有样式元素都受支持,但大多数(如果不是全部)基本样式元素都受支持。