【问题标题】:PHPEXCEL getCalculatedValue or getFormattedValue returns fatal errorPHPEXCEL getCalculatedValue 或 getFormattedValue 返回致命错误
【发布时间】:2015-04-30 11:39:18
【问题描述】:

我有一个 mime 类型为“application/octet-stream; charset=binary”且扩展名为“.xlsx”的文件。 PHPExcel_IOFactory::identify($this->file) 返回“Excel2007”。我这样创建我的阅读器:

$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$6="yes",IF(ISBLANK(INDIRECT(ADDRESS($AN15,MATCH($B$6,INDIRECT("'"&C$7&"'!"&$AN$9-1&":"&$AN$9-1),0),,,C$7),TRUE)),"",INDIRECT(ADDRESS($AN15,MATCH($B$6,INDIRECT("'"&C$7&"'!"&$AN$9-1&":"&$AN$9-1),0),,,C$7),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

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

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:

    来电

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

    将为包含公式的任何单元格返回实际公式


    转储单元格对象时可以看到的值_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中所述

    【讨论】:

    • 我希望它在我使用 getOldCalculatedValue() 时返回 0.174 但它返回 0.17 这对我不利,这是 getOldCalculated 值的问题,因为我需要返回的数字至少为第一个十进制符号,在某些情况下我还需要第二个十进制符号,这就是为什么我在使用该函数时需要获得值 0.1744 并且我不希望将 muber 像 0.17 一样削减。无论如何,我都会尝试您提到的调试模式,如果您知道在使用 getOldCalculatedValue 时如何获得完整的数字,那就太好了。谢谢
    • 如果您的请求 getOldCalculatedValue() 您将得到一个返回值为 0.1744360902255639 的浮点数.....这取决于您如何格式化该值以进行显示
    • Ofc...该值通过了其他一些函数,该函数返回了 0.17 而不是 0.1744360902255639 的格式化值 .. 很抱歉浪费您的时间...我不敢相信我花了 3 个小时在这上面:) :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多