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

2022-08-30 11:54:41

我有以下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

我从像这样的讨论中了解到,我可以将其用于计算单元格。getCalculatedValue()

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

有没有办法让我读取单元格的值,如果它具有简单值,则自动获取该值,如果它是计算,则获取计算结果?

答:

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

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

alt text


答案 1

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


答案 2

如果您不确定单元格的内容(包括值或公式),我建议您主要检查单元格是否有公式,然后相应地复制粘贴。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() 函数非常繁琐,需要大量内存才能正确执行。


推荐