phpexcel在保存工作表之前计算公式

时间:2012-11-16 05:23:42

标签: phpexcel

如果我以仅包含值的Excel5格式保存phpexcel文档,那么引用该文档的人可以毫无问题地打开和关闭它。

但是如果我在细胞中加入一些公式,我会得到两个不希望的结果。

在保存文档之前,我根据列的内容设置列宽。由于尚未计算公式,因此列似乎只与列中最大的单个值一样大,因此宽度设置得太窄。在excel中打开后计算= sum()公式后,内容将溢出单元格宽度并显示为###字符串。

第二个效果是,当总计由excel计算时,该书被标记为由excel修改。当用户尝试退出书籍时,系统会提示他们是否要保存更改。这令人不安,因为在他们看来,他们没有改变任何事情而烦人,因为这是他们真的不想与之抗争的中断。

我一直在搜索文档。我找到了对$ objWriter-> setPreCalculateFormulas(true)的引用,但它对这两个问题没有帮助。

1 个答案:

答案 0 :(得分:2)

如果某列设置为AutoSize,PHPExcel会尝试根据列的计算值(以及SUM()公式的结果)计算列宽,以及通过格式掩码(如千位)添加的任何其他字符分隔符。默认情况下,这是一个估计的宽度:基于使用GD,可以使用更准确的计算方法,但这是一个更大的开销,因此默认情况下它是关闭的。您可以使用

启用更准确的计算
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

如果工作表包含公式,则某些版本的MS Excel文件会包含详细说明计算树的其他信息:PHPExcel未保存的数据(因为计算树结构是一个很大的开销)。您没有指明用于保存工作簿的格式,或者您用于打开它们的MS Excel版本;但这是在MS Excel中打开PHPExcel生成的文件时,任何提示保存更改的正常说明。