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

Edw*_*uay 40 php phpexcel

我有以下Excel文件:

替代文字

我通过循环遍历每个单元格并获取值来读取它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;
}
Run Code Online (Sandbox Code Playgroud)

但是,虽然它读取的数据很好,但它在字面上读入了计算:

替代文字

我从像这样的讨论中理解我可以getCalculatedValue()用于计算细胞.

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

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

回答:

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

...->getCell($columnAsLetters.$row)->getCalculatedValue();
Run Code Online (Sandbox Code Playgroud)

替代文字

Edw*_*uay 31

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

  • getCalculatedValue()将返回包含公式的单元格的计算值,或非公式单元格的实际值.getValue()将始终返回单元格的实际值,包括包含公式的单元格的公式.getFormattedValue()将返回公式单元格的计算值,或非公式单元格的实际值,并应用任何数字格式化掩码,作为字符串. (4认同)
  • 至于为什么getValue()返回公式,历史原因.在某些时候,我计划引入getFormula()/ setFormula()方法,弃用getCalculatedValue()并更改getValue()以返回计算值...但我需要在几个版本中逐步执行此操作以允许向后兼容性. (3认同)

pan*_*cy1 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);
Run Code Online (Sandbox Code Playgroud)

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


J-w*_*who 7

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

  • getOldCalculatedValue()适合我 (3认同)

Joe*_*eOD -2

我从来没有在 PHP 中导入过 excel 文件,所以这只是一次摸索。

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

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