我正在开发基于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
单元格的样式。
出于测试和调试目的,我还试图克隆单元对象,但没有成功。
答案 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)
...
}
在你的第二个循环中