PHPExcel - 公式中的错误循环引用

时间:2012-12-09 11:12:36

标签: php phpexcel

我不断发现这个错误"公式中的循环参考"。

当我尝试下载我的Excel文件时。

现在,当我删除' ='来自我的档案中的公式

$this->exportObj->setActiveSheetIndex(0)
                                ->setCellValue(strtoupper($this->abc[$currentColumn]).$currentLine, (str_replace("=", "", $column)) );

我可以下载文件,但当然,formala不会工作..

这是我的excel文件: http://www.2shared.com/document/SPtnvq6e/excel.html

我的配方有什么问题? 我无法看到任何我做错的事情......

2 个答案:

答案 0 :(得分:8)

循环公式是(例如)单元格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;

答案 1 :(得分:0)

对我来说,这是在我指定向后的列范围时发生的。因此,一旦我将它从低到高排序,它就会给出E11:E10而不是E10:E11,该错误消失了。我正在使用= SUM()函数,我想phpExcel和excel无法向后处理它……