python – Excel XLSX XML操作:直接修改XLSX内容时,避免“存储为文本的数字”和非计算公式?

我正在自动化Excel报表批量创建创建过程. Excel文件用作报告模板,^ SOME_DATA ^等占位符通过
Python脚本替换,该脚本解压缩.XLSX文件,执行基本查找并替换sharedStrings.xml和sheet1.xml文件,然后重新压缩已完成的文件.这部分工作(最后).

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

至今…

>我尝试使用= VALUE(A1)(等)进行转换以将文本数字转换为实际数字…这可以交互方式工作,但在以编程方式创建文件时失败:公式单元格显示为#VALUE! (弹出:“值中的错误”)除非您编辑它并按Enter键.
>我更喜欢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>

我希望这有帮助.

点赞