当我尝试从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(),但我不确定这个值是否始终可用/可靠。
¿有什么建议可以解决这个问题吗?。
感谢的,
费兰。