【发布时间】:2013-12-05 08:20:22
【问题描述】:
我正在尝试使用 PHPExcel 1.7.9 在我的 XSLX 工作簿中评估以下公式:=IF($H$7=1,$F$13,$H$227*$J$227)
在我必须更新工作簿中的一些单元格然后我使用这一行来计算值之前:
$sheet->getCell('L228')->getCalculatedValue();
但是,PHPExcel 似乎没有正确更新包含公式的单元格。它会抛出一些通知消息,如下所示,但不会更新单元格的计算值:
注意:未定义的偏移量:D:\my-path\hkc\Classes\PHPExcel\Calculation.php 第 2852 行中的 2
也不例外,getCalculatedValue() 似乎返回了 MS Excel 计算的旧缓存值。如下所述,我已经激活了计算引擎的调试日志,但它似乎是空的:
PHPExcel_CalcEngine_Logger Object
(
[_writeDebugLog:PHPExcel_CalcEngine_Logger:private] =>
[_echoDebugLog:PHPExcel_CalcEngine_Logger:private] =>
[_debugLog:PHPExcel_CalcEngine_Logger:private] => Array
(
)
[_cellStack:PHPExcel_CalcEngine_Logger:private] => PHPExcel_CalcEngine_CyclicReferenceStack Object
(
[_stack:PHPExcel_CalcEngine_CyclicReferenceStack:private] => Array
(
)
)
)
我已经尝试了以下步骤来解决问题:
- 停用计算缓存:
PHPExcel_Calculation::getInstance()->setCalculationCacheEnabled(FALSE); - 激活计算引擎的调试模式:这在How to handle exception with PhpExcel? 尤其是http://phpexcel.codeplex.com/discussions/233047 中有描述
但是,我不得不稍微修改引用页面的代码 - 也许 PHPExcel 1.7.9 中发生了一些变化?
激活调试:PHPExcel_Calculation::getInstance()->writeDebugLog = true;
获取调试日志:print_r(PHPExcel_Calculation::getInstance()->getDebugLog());
我不明白为什么引擎的实际日志是空的?引擎在写出任何条目之前停止工作,或者我的调试配置有问题?
但是,我尝试使用 Java 和 Apache POI 评估相同的公式 - 它奏效了!不幸的是,我必须在当前项目中使用 PHP。
请帮帮我!也许有人知道公式评估有什么问题,或者至少可以给我一些提示如何正确激活调试?
谢谢!
【问题讨论】: