phpExcel:getCalculatedValue()中的错误

时间:2016-06-14 10:43:26

标签: php phpexcel

当我尝试从Cell中获取计算值时,读取excel 2007电子表格时出错。这就是代码的样子(我制作了一个简单的测试代码,只是为了尝试不同的东西):

$reader = \PHPExcel_IOFactory::createReader('Excel2007');
$reader->setReadDataOnly(false);
$reader->setLoadSheetsOnly('Operació');

$excel     = $reader->load('../Data/Coordinacio EXS.XLSX');
$worksheet = $excel->getSheet(0);

echo 'lets see ' . $worksheet->getCell('A2')->getValue() . '<br>';
echo 'formula ' . $worksheet->getCell('AW2')->getValue() . '<br>';
echo 'getCalculatedValue ' . $worksheet->getCell('AW2')->getCalculatedValue();
echo '<br><br>';

echo 'lets see ' . $worksheet->getCell('A3')->getValue() . '<br>';
echo 'formula ' . $worksheet->getCell('AW3')->getValue() . '<br>';
echo 'getCalculatedValue ' . $worksheet->getCell('AW3')->getCalculatedValue();
echo '<br><br>';

echo 'lets see ' . $worksheet->getCell('A4')->getValue() . '<br>';
echo 'formula ' . $worksheet->getCell('AW4')->getValue() . '<br>';
echo 'getCalculatedValue ' . $worksheet->getCell('AW4')->getCalculatedValue();
echo '<br><br>';

没有什么特别的,如你所见。当我运行此代码时,我有这个例外:

Fatal error: Uncaught exception 'PHPExcel_Calculation_Exception' with message 'Operació!AW4 -> Formula Error: An unexpected error occured' in C:\Apache2.2\htdocs\vendors\PHPOffice\PHPExcel\1.8.1\Classes\PHPExcel\Cell.php on line 293 PHPExcel_Calculation_Exception: Operació!AW4 -> Formula Error: An unexpected error occured in C:\Apache2.2\htdocs\vendors\PHPOffice\PHPExcel\1.8.1\Classes\PHPExcel\Cell.php on line 293 Call Stack: 0.0015 358240 1. {main}() C:\Apache2.2\htdocs\carrega-excepcions\app\provar.php:0 31.3571 152068448 2. PHPExcel_Cell->getCalculatedValue() C:\Apache2.2\htdocs\carrega-excepcions\app\provar.php:56 

如果我查看Excel本身,公式为:

=SI([@[Codi Diàleg]]="";[@[Dept Aux]];BUSCARV([@[Codi Diàleg]];'CMI - Llistats mestres'!$I$2:$Q$4000;2;FALSO))

当PHPExcel读取此公式时,我会回答这个问题:

=IF(Tabla3[[#This Row],[Codi Diàleg]]="",Tabla3[[#This Row],[Dept Aux]],VLOOKUP(Tabla3[[#This Row],[Codi Diàleg]],'CMI - Llistats mestres'!$I$2:$Q$4000,2,FALSE))

为了进行测试,我改变了一点公式。我们的想法是使用单元格范围,而不是命名范围。就像那样:

=SI(AP2="";AO2;BUSCARV(AP2;Hoja5!$I$2:$Q$4000;2;FALSO))

这个公式,当由PHPExcel引用时,它变成:

=IF(AP2="",AO2,VLOOKUP(AP2,[2]Hoja5!$I$2:$Q$4000,2,FALSE))

现在getCalculatedValue()方法按预期工作。因此,似乎PHPExcel的计算引擎与命名范围不兼容,即使使用命名单元格(如“CodiDiàleg”)。

我不想要求最终用户更改公式,我更愿意找到PHPExcel的解决方案。似乎是使用getOldCalculatedValue()而不是getCalculatedValue(),但我不确定这个值是否始终可用/可靠。

¿有什么建议可以解决这个问题吗?。

感谢的,

费兰。

0 个答案:

没有答案