如何使用PHPExcel自动读取计算值?

时间:2011-01-03 13:49:51

标签: php phpexcel

我有以下 Excel 文件:

alt text

我通过循环在每个单元格上读取并使用getCell(...)->getValue()获取值:

$highestColumnAsLetters = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); //e.g. 'AK'
$highestRowNumber = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
$highestColumnAsLetters++;
for ($row = 1; $row < $highestRowNumber + 1; $row++) {
    $dataset = array();
    for ($columnAsLetters = 'A'; $columnAsLetters != $highestColumnAsLetters; $columnAsLetters++) {
        $dataset[] = $this->objPHPExcel->setActiveSheetIndex(0)->getCell($columnAsLetters.$row)->getValue();
        if ($row == 1)
        {
        $this->column_names[] = $columnAsLetters;
        }
    }
    $this->datasets[] = $dataset;
}

然而,尽管它读取的数据很好,但它会在计算中读取字面

alt text

我从讨论like this one了解到,我可以将getCalculatedValue()用于计算细胞。

问题是在我导入的Excel工作表中,我事先不知道哪些单元格是计算的,哪些不是。

我是否有办法以一种自动获取值的方式读取单元格的值,如果它具有简单值,并且如果是计算则获得计算结果?

答案:

事实证明getCalculatedValue()适用于所有单元格,让我想知道为什么这不是getValue()的默认值,因为我认为人们通常会想要计算的值而不是方程式在任何情况下,这都有效:

...->getCell($columnAsLetters.$row)->getCalculatedValue();

alt text

5 个答案:

答案 0 :(得分:30)

getCalculatedValue()似乎适用于所有单元格,见上文

答案 1 :(得分:11)

如果您不确定单元格的内容(包含的值或公式), 我建议您主要检查单元格是否有公式,然后复制 - 粘贴相应的。在这种情况下,getOldCalculatedValue()非常有用。这是一个例子:

$code = $sheet->getCell('A'.$y)->getValue();
if(strstr($code,'=')==true)
{
    $code = $sheet->getCell('A'.$y)->getOldCalculatedValue();
}
$objPHPExcel4->setActiveSheetIndex(0)
             ->setCellValue('A'.$l, $code);

对于大型数据集,getCalculatedValue()函数非常麻烦,并且需要大量内存才能正确执行。

答案 2 :(得分:7)

看起来不推荐使用getCalculatedValue()。请尝试使用getFormattedValue()。

答案 3 :(得分:0)

getCalculatedValue()似乎做了你想要的正确工作。如果单元格包含FBV(基于公式的值),它将返回正确的值。如果没有,则返回正常值。

答案 4 :(得分:-2)

我从未在PHP中导入过excel文件,所以这只是在黑暗中刺伤。

为什么不检查单元格中的第一个字符是否为“=”

如果为true getCalculatedValue()
如果不是getCell()