42

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

但是,尽管它可以很好地读取数据,但它会按字面意思读取计算:

替代文字

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

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

有没有办法让我读入一个单元格的值,如果它有一个简单的值,它会自动获取值,如果它是一个计算,它会得到计算的结果?

回答:

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

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

替代文字

4

5 回答 5

35

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

于 2011-01-03T14:03:14.373 回答
12

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

于 2015-06-22T11:57:24.533 回答
7

Looks like getCalculatedValue() is deprecated. Try using getFormattedValue() instead.

于 2014-09-22T22:07:42.810 回答
0

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

于 2014-02-19T09:06:30.337 回答
-2

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

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

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

于 2011-01-03T14:00:01.987 回答