PHPExcel中对单元格的错误引用

时间:2015-03-16 09:35:27

标签: phpexcel

我正在开发基于PHPExcel库的导入程序。

这段代码保存了单元格供以后使用。

foreach ($this->importModel->currentAttributeNames as $columnLabel => $attribute) {
    $cell = $this->_sheet->getCell($columnLabel . $row->getRowIndex());
    $this->importModel->importModelAttributes[$attribute]->setDefaultValueCell($cell);         
}

$this->_sheet包含当前工作表,该工作表是有效的PHPExcel_Worksheet对象。

保存的单元格包含有效的PHPExcel_Cell对象。

后来我尝试在foreach循环中使用它:

foreach ($this->importModel->importModelAttributes as $importModelAttribute) {
    var_dump($importModelAttribute->_defaultValueCell);

    ...
}

$importModelAttribute->_defaultValueCell->getValue()会返回正确的值,但getCoordinate()会返回最后一行第一个单元格的坐标,其中包含此工作表中的数据(A11),而必须为B7

完成了一些其他计算,它们取决于单元格的样式(在这种情况下为颜色),它还返回A11单元格的样式。

出于测试和调试目的,我还试图克隆单元对象,但没有成功。

1 个答案:

答案 0 :(得分:2)

PHPExcel中的单元格集合对象将一个单元格(最后引用的)保留为活动单元格....您的$cell对象实际上是指向该一个活动单元格的指针。

实际上,您对setDefaultValueCell($cell);的调用会将单元格指针存储在$defaultValueCell中,该指针将指向您拨打电话的正确单元格,但下一次迭代会调整指向新$cell值的指针,因为tat是新的“活动”单元格。

您可以尝试使用

进行“克隆”
$cell = clone $this->_sheet->getCell($columnLabel . $row->getRowIndex());

但您可能更好的方法是将单元格地址/坐标存储在$defaultValueCell中,然后使用

foreach ($this->importModel->importModelAttributes as $importModelAttribute) {
    $cell = $this->_sheet->getCell($importModelAttribute->_defaultValueCell)
    ...
}

在你的第二个循环中