2012-06-25 48 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

,你需要給我們的公式美國/英國分離器的開發者文檔狀態。

報價:

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

進出口使用的數據庫導入的目的本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

這也解決了我的錯誤。 –