【问题标题】:PHP_Calculation_Exception - maybe related to Excel Version in GermanPHP_Calculation_Exception - 可能与德语的 Excel 版本有关
【发布时间】:2014-01-22 11:38:23
【问题描述】:

我使用的是德语 Excel 版本,并将以下公式写入 Cell AM27:

=WENNFEHLER(AN61/(AN$61+AN$62+AN$63);"")

这对应于英文公式:

=iferror(AM61/(AM$61+AM$62+AM$63),"")

现在我正在使用 PHPExcel 加载和保存文件并得到这个异常:

PHPExcel_Calculation_Exception: MySheetName!AN27 -> Formula Error: Unexpected ,

我的问题是

  1. 使用英文 Excel 版本和英文公式时是否会出现同样的错误?
  2. 有没有办法解决这个异常?
  3. 或者我可以处理工作表的其他部分并保存文件而不计算此单元格吗?

感谢您的帮助!

【问题讨论】:

    标签: php exception phpexcel


    【解决方案1】:

    开发者文档第 4.6.4 节:

    将公式写入单元格时:

    • 小数点分隔符为.(句点)
    • 函数参数分隔符为,(逗号)
    • 矩阵行分隔符为;(分号)
    • 必须使用英文函数名

    例如

    $objPHPExcel->getActiveSheet()
        ->setCellValue(
            'AM27',
            '=IFERROR(AM61/(AM$61+AM$62+AM$63),"")'
        );
    

    如果您想使用德语函数名称和分隔符编写公式,则需要使用语言环境函数来处理德语和英语之间的翻译(如开发者文档的第 4.6.5 节所述):

    $locale = 'de';
    $validLocale = PHPExcel_Settings::setLocale($locale);
    
    $objPHPExcel->getActiveSheet()
        ->setCellValue(
            'AM27',
            PHPExcel_Calculation::getInstance()
                ->translateFormulaToEnglish(
                    '=WENNFEHLER(AM61/(AM$61+AM$62+AM$63);"")'
                )
        );
    

    【讨论】:

    • 嗨,马克,感谢您的快速答复。也许我没有让自己足够清楚:我没有用 PHPExcel 编写任何公式。我正在尝试使用已经包含公式的工作簿。我用 PHPExcel 加载工作簿,然后用 PHPExcel 保存它 - 我没有在两者之间做任何事情(!)在保存过程中出现上述异常。
    • 您正在阅读的文件是什么格式的? Excel2007 OfficeOpenXML 在内部将公式保存为英/美格式文本,而 Excel5 (BIFF) 使用标记化格式,由 Excel5 阅读器转换为英/美文本格式。如果文件是 CSV 文件,其中公式呈现为公式而不是计算值,则需要手动完成此转换,因为 PHPExcel 不会为您转换。
    • 嗨,马克,我们似乎更进一步:文件实际上是 Excel5,所以这可能是原因。但是,现在我手动将文件保存为 Excel2007 并重试该过程。我收到一个看起来像无限循环的错误消息:注意:未定义的索引:在 D:\Dokumente und Einstellungen\u116003\Eigene Datei en\Programmier Bereich\lib\PHPExcel\Calculation\LookupRef.php 在线629 PHP 注意:未定义的偏移量:D:\Dokumente und Einstellungen\u116003\Eigene Dateien\Programmier Bereich\lib\PHPExcel\Calculation\LookupRef 中的 33。 php on line 622 你能帮帮我吗?
    • 另一个注意事项:我可以通过跳过包含大量公式的工作表来避免先前的错误。这只是让我从一张包含许多图片的表格中遇到下一个问题: PHPExcel_Writer_Exception: File zip://D:\Dokumente und Einstellungen\u116003\Eig ene Dateien\Programmier Bereich\DTO Reporting\test\fixture\ScoreCard\ tmpOutputTe mplate.xlsx#xl/media/image1.png 再次不存在:当我从该表中删除图片时,我可以加载并保存文件。因为能够保存带有公式和图片的文件会很好:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2020-04-24
    • 2022-08-02
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多