循环公式类似于(例如)单元格 A1 包含公式 =B1+1 而单元格 B1 包含 =A1+1,即。执行公式会导致一连串的计算循环回到自身。
这在 Excel 中可能有效,但默认行为是在遇到错误消息时生成错误消息。但是,您可以更改此行为,以便 Excel 将通过指定数量的循环或迭代来处理公式。
PHPExcel 支持这两种行为:默认是生成错误消息,就像 Excel 一样。但是,如果将计算引擎的 $cyclicFormulaCount 属性设置为大于 0 的值,它将模拟 Excel 可以表现出的第二种行为。在最简单的层面上:
PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;
将抑制循环错误并允许执行基本的循环计算,将 $cyclicFormulaCount 设置为更高的值将允许通过多个循环或迭代计算公式(到您指定的值)。
getOldCalculatedValue() 方法检索最后一次由 MS Excel 本身执行的计算结果。这可能是正确的,但不能保证(例如:如果 Excel 本身已禁止公式计算)。
或者,您可以在保存文件之前阻止 PHPExcel 计算公式:
$objWriter->setPreCalculateFormulas(FALSE);
编辑
从 1.7.9 版本开始,计算引擎已被修改,每个工作簿文件都有一个计算引擎实例,因此有必要指明需要为哪个实例设置 cyclicFormulaCount。
而不是
PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;
你会用
PHPExcel_Calculation::getInstance($objPHPExcel)->cyclicFormulaCount = 1;