PHPEXCEL getCalculatedValue 或 getFormattedValue returns 致命错误

PHPEXCEL getCalculatedValue or getFormattedValue returns fatal error

我有一个 mime 类型 "application/octet-stream; charset=binary" 和扩展名“.xlsx”的文件。 PHPExcel_IOFactory::identify($this->file) returns 'Excel2007'。我这样创建 reader:

$this->objectReader = PHPExcel_IOFactory::createReaderForFile($this->file);

当我尝试使用公式获取单元格值时,我只能通过两种方式进行:

1)$sheet->getCell($columns[$i].$row->getRowIndex())->getValue() 
//return the actual formula as a string
2)$sheet->getCell($columns[$i].$row->getRowIndex())->getOldCalculatedValue() 
//returns the oldCalculated value which is not always corret (for example the value in the cell is 17.4% and it returns 0.17)

当我转储 $sheet->getCell($columns[$i].$row->getRowIndex()) 对象时,输出以休闲开始:

object(PHPExcel_Cell)[142370]
  private '_value' => string '=IFERROR(IF(C="yes",IF(ISBLANK(INDIRECT(ADDRESS($AN15,MATCH($B,INDIRECT("'"&C&"'!"&$AN-1&":"&$AN-1),0),,,C),TRUE)),"",INDIRECT(ADDRESS($AN15,MATCH($B,INDIRECT("'"&C&"'!"&$AN-1&":"&$AN-1),0),,,C),TRUE)),""),"")' (length=231)
  private '_calculatedValue' => float 0.1744360902255639
  private '_dataType' => string 'f' (length=1)
  private '_parent' =>...

那里有正确的值,但我无法访问它... 当我尝试使用 getFormattedValue() 或 getCalculatedValue() 获取单元格值时,输出是休闲致命错误:

Catchable fatal error: Argument 2 passed to PHPExcel_Calculation_LookupRef::INDIRECT() must be an instance of PHPExcel_Cell, boolean given

知道如何解决这个问题吗?我真的被困住了,不知道。谢谢。

打来电话

$sheet->getCell($columns[$i].$row->getRowIndex())->getValue() 

将return包含公式

的任何单元格的实际公式

转储单元格对象时您可以看到的值 _calculatedValue 是您可以使用对

的调用检索的值
$sheet->getCell($columns[$i].$row->getRowIndex())->getOldCalculatedValue()

在这种情况下,你说它不正确.....你错了,它是正确的:17.4% 0.174...不同之处在于应用 % 格式掩码显示 MS Excel 中的实际单元格值乘以 100


当你打电话时

$sheet->getCell($columns[$i].$row->getRowIndex())->getCalculatedValue()

$sheet->getCell($columns[$i].$row->getRowIndex())->getFormattedValue()

PHPExcel 尝试执行单元格的公式并重新计算值。如果这是抛出异常,您可以通过启用计算引擎的调试模式来调试计算引擎以查看哪里出了问题,如 this gist

中所述