关于php:如何使用PHPExcel自动读取计算值?

How to automatically read in calculated values with PHPExcel?

我有以下Excel文件:

alt text

我通过遍历每个单元格并使用getCell(...)->getValue()获取值来读入它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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()的默认值,因为我认为人们通常会希望计算的值而不是方程式本身,在任何情况下都可行 :

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

alt text


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


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

1
2
3
4
5
6
7
$code = $sheet->getCell('A'.$y)->getValue();
if(strstr($code,'=')==true)
{
    $code = $sheet->getCell('A'.$y)->getOldCalculatedValue();
}
$objPHPExcel4->setActiveSheetIndex(0)
             ->setCellValue('A'.$l, $code);

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


似乎已弃用getCalculatedValue()。尝试改用getFormattedValue()。


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


我从未在PHP中导入过excel文件,因此这只是黑暗中的一击。

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

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