问题
问题可能出在MS
Excel本身(一旦您确定所有公式都已计算并保存在.xlsx文件中)。根据我的测试,如果Excel发现文件是由较早版本的Excel或其他应用程序最后保存的(点在于版本号不匹配和/或低于当前版本),则Excel将在打开期间重新计算所有公式。
Excel打开文件)以保持良好的兼容性。
解
(使Excel认为.xlsx文件是由同一Excel版本生成的,以避免重新计算)
Excel从.xlsx存档(.xlsx只是一个压缩的存档)内目录中的
workbook.xml文件读取所有文件版本控制信息
xl。
Apache POI生成的workbook.xml文件如下所示:
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officedocument/2006/relationships"> <workbookPr date1904="false"/> <bookViews><workbookView activeTab="0"/></bookViews> <sheets> <sheet name="new sheet" r:id="rId3" sheetId="1"/> </sheets> <calcPr calcId="0"/></workbook>
Excel 2010生成的文件如下所示:
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officedocument/2006/relationships"> <fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="9303"/> <workbookPr defaultThemeVersion="124226"/> <bookViews><workbookView xWindow="630" yWindow="510" windowWidth="27495" windowHeight="14505"/></bookViews> <sheets> <sheet name="new sheet" sheetId="1" r:id="rId1"/> </sheets> <calcPr calcId="145621"/></workbook>
请注意
<fileVersion>,POI生成文件中的标记完全丢失,而Excel生成文件中的
<calcPr>标记
calcId设置为某个实际值。
通过插入相关<fileVersion>
标签并将其值设置calcId
为等于或大于我当前版本的Excelworkbook.xml
生成的数字到POI生成的数字,我能够避免Excel 2010自动重新计算公式(以及烦人的“保存更改”对话框)。
有关
workbook.xml格式的更多信息,请参见MSDN Open XML
SDK文档。



