Я продолжаю возвращать эту ошибку «Циклическая ссылка в Формуле».
Когда я пытаюсь загрузить файл excel.
Теперь, когда im удаляет '=' из формулы из моего файла
$this->exportObj->setActiveSheetIndex(0) ->setCellValue(strtoupper($this->abc[$currentColumn]).$currentLine, (str_replace("=", "", $column)) );
Я могу загрузить файл, но, конечно, формала не будет работать.
Это мой файл excel: http://www.2shared.com/document/SPtnvq6e/excel.html
Что не так с моими формулами? Я не вижу ничего, что я делаю неправильно.
Циклическая формула является такой, как (например) ячейка A1 содержит формулу = B1 + 1, а ячейка B1 содержит = A1 + 1, т.е. где выполнение формулы приводит к цепочке вычислений, которая зацикливается на себе.
Это может быть действительно в Excel, хотя поведение по умолчанию заключается в создании сообщения об ошибке, когда оно встречается. Однако вы можете изменить это поведение, чтобы Excel обрабатывал формулу с помощью определенного количества циклов или итераций.
PHPExcel поддерживает оба поведения: по умолчанию создается сообщение об ошибке, как это делает Excel. Но если вы установите для свойства $ cyclicFormulaCount механизма вычислений значение больше 0, оно будет эмулировать второе поведение, которое может показать Excel. На самом простом уровне:
PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;
будет подавлять циклические ошибки и позволяет выполнять базовый циклический расчет, устанавливая значение $ cyclicFormulaCount для более высоких значений, позволяя вычислять формулы через несколько циклов или итераций (до значения, которое вы указали).
Метод getOldCalculatedValue () извлекает результат вычисления, как последний выполнялся самой MS Excel. Это может быть правильно, но не гарантировано (например: если вычисление формулы было подавлено в самом Excel).
Кроме того, вы можете запретить PHPExcel вычислять формулы перед сохранением файла:
$objWriter->setPreCalculateFormulas(FALSE);
РЕДАКТИРОВАТЬ
Начиная с версии 1.7.9, движок Calculation был изменен так, что для каждого файла рабочей книги есть один экземпляр вычислительного механизма, поэтому необходимо указать, какой экземпляр вам нужно установить для cyclicFormulaCount.
Скорее, чем
PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;
вы бы использовали
PHPExcel_Calculation::getInstance($objPHPExcel)->cyclicFormulaCount = 1;