PHPExcel不重新计算并始终显示相同的值

时间:2015-07-09 13:43:18

标签: php phpexcel phpexcelreader

我正在进行一个项目,我正在阅读excel文档中的值。使用getCalculatedValue函数时,它始终返回相同的值。我尝试了getOldCalculatedValue函数但没有成功。我在某处读到,如果在重新计算该单元格中的值之前清除缓存将会有所帮助。有人可以解释我怎么能用下面的代码吗?

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');  
$objPHPExcel = $objReader->load("test.xlsx");
$value1 = $objPHPExcel->getActiveSheet()->getCell('B1')->getCalculatedValue();
$value2 = $objPHPExcel->getActiveSheet()->getCell('D1')->getCalculatedValue();

1 个答案:

答案 0 :(得分:0)

当您首次通过调用getCalculatedValue()检索计算值时,PHPExcel(默认情况下)会缓存结果,因此后续调用不会重新计算,而只是返回缓存的值。

这减少了在其他单元格公式中引用相同计算单元格时通常会发现的计算开销

当您正在读取计算数据,然后更改单元格值然后重新计算时,这可能是一个问题,因此PHPExcel提供了允许您控制缓存的方法

您可以通过以下任一方式禁用计算缓存来更改默认行为,以便永远不会缓存计算结果:

PHPExcel_Calculation::getInstance($objPHPExcel)->disableCalculationCache();

或:

PHPExcel_Calculation::getInstance($objPHPExcel)->setCalculationCacheEnabled(false);

或者您可以通过拨打以下电话来随时刷新缓存:

PHPExcel_Calculation::getInstance($objPHPExcel)->clearCalculationCache();

请注意,getOldCalculatedValue()方法用于检索MS Excel本身为单元格计算的最后一个值,而不是PHPExcel中的值。不保证以任何方式反映当前数据,因为可以禁用MS Excel执行公式计算;但有时可以用于引用外部文件或数据源的公式。