4

数式のペアで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

そして、その前に=を追加すると機能します。

私が持っている2番目の式は条件1です(同じ問題、それはそれを生成することができますが、それはphpで動作します)

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

3 に答える 3

12

開発者向けドキュメントには、数式で US/UK セパレータを使用する必要があると記載されています。

引用:

4.6.4. 数式をセルに書き込む

Excel ファイル内では、数式は Microsoft Office Excel の英語版で表示されるように常に格納され、PHPExcel はすべての数式をこの形式で内部的に処理します。これは、次の規則が成り立つことを意味します。

• 小数点は「.」です。(限目)

• 関数の引数の区切り文字は「,」(カンマ)

• 行列の行セパレータは「;」です。(セミコロン)

• 英語の関数名を使用する必要があります

これは、Excel ファイルの作成に使用された Microsoft Office Excel の言語バージョンに関係ありません。

それで

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

それよりも

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

適用される唯一の例外は、そのドキュメントのセクション 4.6.5 で説明されているように数式のロケール設定を設定した場合です。

セル参照のワークシートの区切り記号は感嘆符です。

'ASIENTOS Agosto'!K4 

いいえ

'ASIENTOS Agosto'.K4 
于 2012-06-25T12:28:02.430 に答える
12

数式の事前計算 デフォルトでは、このライターはスプレッドシート内のすべての数式を事前計算します。これは、大規模なスプレッドシートでは遅くなる可能性があり、望ましくない場合もあります。ただし、式の事前計算を無効にすることはできます。

$objWriter = new PHPExcel_Writer_CSV($objPHPExcel); $objWriter->setPreCalculateFormulas(false);isso リゾルバ $objWriter->save("05featuredemo.csv");

于 2013-07-23T14:19:17.567 に答える
1

データベースのインポート目的でこの PHPExcel クラスを使用していますが、同じエラーが発生しました。一部のデバッグでは、テーブル セルのこの内容がエラーの原因であることが示されました。

=- die Beschaffungsplattform für Geschäftskunden

私は、例外が故意にスローされることを理解しました:

PHPExcel/Classes/PHPExcel/Cell.php 行 288 (現在の PHPExcel バージョン v1.7.6)

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

だから私はちょうどこの例外を削除し、代わりに空の文字列を返します:

$result = "";

その悪い回避策ですが、魅力のように機能します:)

于 2012-10-01T13:19:27.813 に答える