我正在生成xlsx文件,並且希望在此過程中不必計算所有公式的值。 也就是說,我想爲<f>
中的單元格設置<v>
爲0(或省略它),並在打開Excel時填入值。設置xlsx重新計算公式
一個建議是在啓動時運行宏Calculate
,但一直沒有找到關於如何使用簽名宏執行此操作以避免提示用戶的完整指南。一個可以在xlsx中設置的標誌會更好。
編輯:我不在尋找涉及使用Office程序進行更改的答案。我正在尋找文件格式的詳細信息。
我正在生成xlsx文件,並且希望在此過程中不必計算所有公式的值。 也就是說,我想爲<f>
中的單元格設置<v>
爲0(或省略它),並在打開Excel時填入值。設置xlsx重新計算公式
一個建議是在啓動時運行宏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"/>
還要檢查Description of how Excel determines the current mode of calculation。
您可以按照建議使用宏,但是您將創建不太安全且兼容性較差的工作簿,而不會避免用戶交互來強制計算。
如果您選擇使用VBA,您可能會在Workbook_Open
事件中使用Application.Calculate
。
在您的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>
。
這對我來說是一個好主意。但是我測試了它,如果計算模式沒有設置爲自動,打開工作簿時'B2'顯示爲空。 –
此外,Google文檔用於拒絕沒有「
無法完成沒有宏後的動態行爲。 Excel公式/單元格始終是相同的(是靜態的),如果您想要考慮變量行爲,則必須依賴宏(或其他類型的應用程序)。 – varocarbas
@varocarbas你能提供一個完整的答案,詳細說明如何實現這一目標? – OrangeDog
當然。但是如果你想讓宏在同一個文件中,你必須將它轉換成xlsm;並且如果目標計算機中的Excel安全性設置如此,則會出現提示(「是否要啓用宏?」)。無論如何,你還想要嗎? – varocarbas