2012-06-25 2 views
0

У меня странная проблема с phpexcel по паре формул и не может определить источник проблемы. (Другие простые математические формулы работают, только это не удается).Ошибка формулы в PHPExcel

Поскольку отчет о php довольно длинный, я доберусь до сути.

Установка эту формулу как этот

$objPHPExcel->getActiveSheet()->setCellValue("D$cuenta_empleados", "=$'asientos_title'.K$cuadro_row"); 

Выдает мне это

Fatal error: Uncaught exception 'Exception' with message 'INPUT NOMINA Agosto!D8 -> Formula Error: An unexpected error occured' in /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/php/inc/PHPExcel/Cell.php:293 Stack trace: 
#0 /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/php/inc/PHPExcel/Writer/Excel5/Worksheet.php(455): PHPExcel_Cell->getCalculatedValue() 
#1 /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/php/inc/PHPExcel/Writer/Excel5.php(194): PHPExcel_Writer_Excel5_Worksheet->close() 
#2 /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/php/classes/Everything.class.php(2361): PHPExcel_Writer_Excel5->save('../../reports/1...') 
#3 /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/php/classes/Everything.class.php(3813): Everything->create_act_entry(Array, Array, Array, Array, Array) 
#4 /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/controllers/common/generar.php(68): Everything->gen_docs(Array, Array, Array) 
#5 {main} thrown in /Users/PolCPP/Documents/Proyectos/Activos/beneficiat/php/inc/PHPExcel/Cell.php on line 293 

Так отладить его я удалить =, чтобы избежать его вычисления. Я проверяю его на openoffice. И я вижу

'ASIENTOS Agosto'.K4 

И добавление = перед ним работает.

Вторая формула у меня есть вопросы, это состояние один (тот же вопрос, он может генерировать его, но он работает на PHP)

=IF(D22>O22;D22-O22;0) 

ответ

5

документации разработчика говорится, что вам нужно нам US/UK разделителей в формулах ,

Цитирование:

4.6.4. Write a formula into a cell

Inside the Excel file, formulas are always stored as they would appear in an English version of Microsoft Office Excel, and PHPExcel handles all formulae internally in this format. This means that the following rules hold:

• Decimal separator is '.' (period)

• Function argument separator is ',' (comma)

• Matrix row separator is ';' (semicolon)

• English function names must be used

This is regardless of which language version of Microsoft Office Excel may have been used to create the Excel file.

так

=IF(D22>O22,D22-O22,0) 

вместо

=IF(D22>O22;D22-O22;0) 

Единственное исключение, которое применяется, если вы установили региональные настройки для формул, как описано в разделе 4.6. 5 этого документа

Сепаратор для листа в ссылки на ячейку является восклицательный знак:

'ASIENTOS Agosto'!K4 

не

'ASIENTOS Agosto'.K4 
+0

Вау, спасибо он работал. Да, я знаю, что он использует внутренний формат, поэтому я использовал английскую версию openoffice. Но даже если это переводит функции в исходный формат, я предполагаю, что он использует локаль моей ОС для форматирования формул. – PolCPP

1

Im используя этот PHPExcel класс для целей импорта базы данных и я получил ту же ошибку. Некоторые отладки показали, что содержание ячейки таблицы вызвало ошибку:

=- die Beschaffungsplattform für Geschäftskunden 

Я понял, что исключение нарочно по адресу:

PHPExcel/Классы/PHPExcel/Cell.php на строка 288 (текущая PHPExcel версия v1.7.6)

throw(new Exception($this->getParent()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage())); 

Так я просто удалил это исключение и возвращая пустую строку:

$result = ""; 

Сво плохо Обход, но работает как шарм :)

5

Формулы расчет предварительно По умолчанию этого писателя предварительно вычисляет все формулы в электронной таблице.Это может быть медленным на больших таблицах и, возможно, даже нежелательных. Однако вы можете отключить формулу предварительного расчета:

$objWriter = new PHPExcel_Writer_CSV($objPHPExcel); $objWriter->setPreCalculateFormulas(false); ISSO решающему $objWriter->save("05featuredemo.csv");

+0

Отлично! Это фиксировало мои ошибки! – xXx

+0

эта исправленная ошибка тоже. –

Смежные вопросы