【发布时间】: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