【问题标题】:PHPExcel formula causing false column identifierPHPExcel公式导致错误的列标识符
【发布时间】:2014-09-05 07:27:51
【问题描述】:

我遇到了一个有点奇怪的问题。在循环遍历 Excel 电子表格中的行和列时,如果单元格有公式,它会将其视为不同的列。例如:

$c = 0;
foreach ($objWorksheet->getRowIterator() as $row) {
    $c++;
    foreach ($row->getCellIterator() as $cell) {
        $cellValue = trim($cell->getCalculatedValue());
        if ($cell->getColumn() == "N" || $cell->getColumn() == "O") {
            var_dump("ROW: $c . Get column: " . $cell->getColumn());
            var_dump("ROW: $c . Cell value: " . $cellValue);
        }
    }
}

在我用于测试的电子表格中有一个标题和一行。根据 if 语句,它应该只 var_dump 列“N”和“O”中的数据,但它实际上是额外输出 9 次。该电子表格包含 9 个包含公式的单元格,其中包含“N”和“O”的条件。输出:

string(46) "ROW: 2 . Get column: N"
string(48) "ROW: 2 . Cell value: TEST N COLUMN"
string(46) "ROW: 2 . Get column: O"
string(53) "ROW: 2 . Cell value: TEST O COLUMN"
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(59) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "
string(46) "ROW: 2 . Get column: O"
string(45) "ROW: 2 . Cell value: "

我对Excel不是太熟悉,但是9列中输出的公式好像是这样的:

=IF(AF2="YES", N2&O2&"FR/BL"," ")

如您所见,正在使用列“N2”和“O2”,但这会导致 PHPExcel 中的 getColumn 函数出现问题。使用这个公式的列是 AG、AJ、AM、AP、AS、AV、AY、BB、BE,但我认为这无关紧要。

请帮忙!

更新

如果我复制并粘贴该行但只粘贴值,它可以工作。但是,$cellValue 无论如何都使用 getCalculatedValue,所以我不明白为什么这不能解决问题....hmm

【问题讨论】:

  • 您在 var_dump() 参数中有语法错误。检查双引号。
  • 是的,实际代码没有错误,只是这里打错了!我会编辑。
  • 我以为我会在大约六个月前修复这个问题,您使用的是什么版本的 PHPExcel?
  • @MarkBaker 也许就是这样。使用 1.7.9-dev
  • @MarkBaker,1.8.0 不行,我试试 dev-master

标签: php phpexcel


【解决方案1】:

修正以确保在执行公式计算时保持当前单元格

https://github.com/PHPOffice/PHPExcel/commit/87be8d3d8e1c503a6422fee585e5fc5193c66978

使用 composer 更新到“dev-develop”分支修复了这个问题。

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2015-12-08
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多