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

问题描述 投票:0回答:2

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

更新 感谢@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' object has no attribute 'get_sheet_by_name' 而失败

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

python excel openpyxl xlsxwriter styleframe
2个回答
2
投票

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

0
投票

关于 “此工作表包含与此工作簿的 =FDS 代码一起使用的 FactSet XML 数据。修改工作表的内容可能会损坏工作簿的 = FDS 功能。” 错误,这是由添加的非常隐藏的工作表引起的Excel FactSet 插件。如果您在 Excel 中打开该文件,然后转到 VBA,则可以查看非常隐藏的工作表。在项目概述中,您将看到一个名为 __FDCACHE__ 的文件。您可以删除此工作表或明确定义要打开的工作表,例如

df = pd.read_excel("foo.xlsx", sheet_name='Sheet1')  
© www.soinside.com 2019 - 2024. All rights reserved.