可以将 Excel 制表符读入代码并使用格式化写回相同的制表符

Possible to Read Excel Tab into Code and Write Back that Same Tab With Formatting

我有使用 XlsxWriter 创建名为 file_A 的 excel 文件的代码。用户向我发送了一个名为 file_b 的 excel 文件,其中只有一个选项卡,名为 tab_b。他们希望 tab_b 附加到 file_A。这个 tab_b 包括很多格式(我认为其中一些属于 "rich" 格式),我宁愿不必硬编码到代码库中。

有没有办法将 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()

下面的屏幕截图描述了 tab_b 内部 file_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 文件,其中包含一个 sheet 文件,该文件没有数据或本应读取的文件格式。在单元格 A1 中,它显示 "This sheet contains FactSet XML data for use with this workbook's =FDS codes. Modifying the worksheet's contents may damage the wrokbook's = FDS functionality."

不确定这是否是它不起作用的原因,但我必须在创建编写器时指定 "engine='openpyxl'"。如果我没有指定,它会尝试使用 XlsxWriter 并由于 AttributeError: 'Workbook' object has no attribute 'get_sheet_by_name'

而失败

第二次更新 StyleFrame 终于可以正常工作了。请参阅下面@DeepSpace 的回答中的评论。

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()