PHPExcel getOldCalculatedValue返回NULL

时间:2014-10-08 11:56:47

标签: phpexcel

我得出结论,如果单元格包含公式,则getOldCalculatedValue()返回已计算的公式,如果单元格不包含公式,则返回值。 Mark Baker's post证实了我的假设(虽然这篇文章是2011年):

$value = $objPHPExcel->setActiveSheetIndex(0)
                     ->getCell('G'.$i)
                     ->getValue();

Will return the actual formula if the cell contains a formula, or the
value if the cell contains a value.

$value = $objPHPExcel->setActiveSheetIndex(0)
                     ->getCell('G'.$i)
                     ->getCalculatedValue();

Will return the calculated value if the cell contains a formula, or the value
if the cell contains a value.

$value = $objPHPExcel->setActiveSheetIndex(0)
                     ->getCell('G'.$i)
                     ->getOldCalculatedValue();

Will return the previous result of a calculation if the cell contains a formula,
or the value if the cell contains a value.

我用一个单元格A1创建了xlsx(Excel 2007)。 A1的内容是字符串'foo'。当我打电话

$reader = new PHPExcel_Reader_Excel2007();
$excel = $reader->load(Input::file("pricelist")->getRealPath());
$worksheet = $excel->setActiveSheetIndex(0);
var_dump($worksheet->getCell('A1')->getOldCalculatedValue());

它打印NULL。如果我将函数更改为getCalculatedValue()或getValue(),它可以正常工作。我正在使用PHPExcel 1.8.0。

1 个答案:

答案 0 :(得分:3)

严格来说,getOldCalculatedValue()可能返回NULL的原因有几个,即使对于包含公式的单元格也是如此。

主要原因是:

  • 并非所有电子表格格式都支持维护上次计算的值
  • 即使对于支持维护上次计算值的格式,创建该文件的应用程序也可能没有将值写入文件
  • Excel中可能已禁用自动计算(假设使用Excel创建文件

如果在输入公式后的某个时刻禁用自动计算,最后可能会出现更多问题,但随后的数据更改会影响公式,因为它们不会反映在旧公式中计算值