gpt4 book ai didi

python - Excel XLSX XML 操作 : Avoiding "number stored as text" and non-calculating formulas when modifying XLSX guts directly?

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:03 25 4
gpt4 key购买 nike

我正在自动化 Excel 报告批处理创建过程。 Excel 文件用作报告模板,^SOME_DATA^ 等占位符通过解压缩 .XLSX 文件的 Python 脚本替换,在 sharedStrings.xml 中执行基本查找和替换> 和 sheet1.xml 文件,然后重新压缩完成文件。这部分(终于)起作用了。

但是,当在 Excel 中打开新文件时,替换占位符的数字全部被 Excel 标记为“数字存储为文本”(当然,这会导致工作表中的公式和格式设置失败)。大多数占位符由 Excel 存储在 sharedStrings.xml 中,考虑到其中的“字符串”部分,我并不感到惊讶它们仍被视为字符串。

到目前为止...

  • 我尝试使用 =VALUE(A1)(等)进行转换以将文本数字转换为实际数字...这可以交互工作,但在以编程方式创建文件时失败:公式单元格显示为 #VALUE!(弹出窗口:“值错误”),除非您对其进行编辑并按回车键。

  • 我更喜欢 Python,因为它适合其余的自动化,但可以在 VBA 中重做查找/替换/保存代码,以在自动化程度较低的状态下“将其推出”。然而,就我个人而言,VBA 解决方案的可靠性/稳健性并不太好。

  • openpyxl 可以(合理地)很好地读取或写入 Excel,但似乎不支持对现有格式化文件进行编辑。

最佳答案

我不是 Open XML 方面的专家,但我相信您可以通过将数值直接写入工作表的 xml 文件 (sheet1.xml) 来解决这个问题。您首先必须搜索工作表的 xml 文件以查找包含字符串的单元格。这些单元格具有 t="s"属性。 v节点的值为sharedStrings.xml文件中引用字符串的索引。

    <row r="8" spans="1:6" x14ac:dyDescent="0.25">
<c r="F8" t="s">
<v>2</v>
</c>
</row>

您可以检查单元格是否引用了占位符字符串(sharedStrings.xml 中^SOME_DATA^ 的索引)。如果是,那么您可以将字符串索引替换为数值并删除 t 属性:

        <c r="F8" t="s">
<v>2</v>
</c>

成为

        <c r="F8">
<v>812397568</v>
</c>

希望对您有所帮助。

关于python - Excel XLSX XML 操作 : Avoiding "number stored as text" and non-calculating formulas when modifying XLSX guts directly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9998512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com