我正在生成xlsx文件,并且不希望在此过程中计算所有公式的值。
也就是说,我想设置 <v>
对于具有a的单元格,为0(或省略) <f>
,并在Excel打开时让Excel填入值。
一个建议是进行宏观运行 Calculate
在启动时,但无法找到有关如何使用签名宏执行此操作的完整指南,以避免提示用户。你可以在xlsx中的某个地方设置一个标志会好得多。
编辑:我不是在寻找涉及使用Office程序进行更改的答案。我正在寻找文件格式的详细信息。
我正在生成xlsx文件,并且不希望在此过程中计算所有公式的值。
也就是说,我想设置 <v>
对于具有a的单元格,为0(或省略) <f>
,并在Excel打开时让Excel填入值。
一个建议是进行宏观运行 Calculate
在启动时,但无法找到有关如何使用签名宏执行此操作的完整指南,以避免提示用户。你可以在xlsx中的某个地方设置一个标志会好得多。
编辑:我不是在寻找涉及使用Office程序进行更改的答案。我正在寻找文件格式的详细信息。
Python模块 XlsxWriter 设定公式 <v>
值为0(除非实际值已知)和 <calcPr>
fullCalcOnLoad
属性为true xl/workbook.xml
文件:
<calcPr fullCalcOnLoad="1"/>
这适用于我测试的所有Excel和OpenOffice,LibreOffice,Google Docs和Gnumeric版本。
它不起作用的地方是无法重新计算公式值的非电子表格应用程序,例如文件查看器。
如果计算模式设置为自动,则Excel始终(重新)计算打开时的工作簿。
因此,只需将计算模式设置为“自动”即可生成文件。
在 xl/workbook.xml
,将以下节点添加到工作簿节点:
<calcPr calcMode="auto"/>
还检查一下 Excel如何确定当前计算模式的说明。
您可以按照建议使用宏,但是您将创建一个安全性较低且兼容性较差的工作簿,而不会避免用户交互以强制计算。
如果您选择使用VBA,您可以 Application.Calculate
在 Workbook_Open
事件。
在您的XML内容中,只需省略 <v>
每个单元格中具有公式的实体,这将强制Ms Excel实现公式,无论Excel选项是什么。
代替:
<c r="B2" s="1">
<f>SUM(A1:C1)</f>
<v>6</v>
</c>
有:
<c r="B2" s="1">
<f>SUM(A1:C1)</f>
</c>
如果必须在已经给定的XML内容中实现公式,那么您可以轻松编写一个搜索每个内容的小型解析器 <c>
实体。如果 <c>
实体有一个 <f>
实体,然后删除它 <v>
实体。