PHPExcel 中的公式错误


Formula error in 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

因此,为了调试它,我删除了 = 以避免它的计算。我在开放式办公室检查它。我看到了

'ASIENTOS Agosto'.K4

在它前面添加 = 是有效的。

我有问题的第二个公式是一个条件(同样的问题,它可以生成它,但它适用于 php)

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

开发人员文档指出,您需要在公式中使用美国/英国分隔符。

引用:

4.6.4. 将公式写入单元格

在 Excel 文件中,公式始终按照英文版本的Microsoft Office Excel和PHPExcel在此内部处理所有公式 格式。这意味着以下规则成立:

• 小数分隔符 是"."(期间)

• 函数参数分隔符为 '","(逗号)

•矩阵 行分隔符为 ';'(分号)

• 必须使用英文函数名称

这与 Office Excel Microsoft哪种语言版本无关 可能已用于创建 Excel 文件。

所以

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

而不是

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

唯一适用的例外情况是,如果您已按照该文档第 4.6.5 节中所述为公式设置了区域设置

单元格引用中工作表的分隔符是感叹号:

'ASIENTOS Agosto'!K4 

'ASIENTOS Agosto'.K4 

公式预计算默认情况下,此编写器预先计算电子表格中的所有公式。这在大时可能会很慢电子表格,甚至可能是不需要的。但是,您可以禁用公式预计算:

$objWriter = new PHPExcel_Writer_CSV($objPHPExcel); $objWriter->setPreCalculateFormulas(false); ISSO 解析程序 $objWriter->save("05featuredemo.csv");

我使用此 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 = "";

这是一个糟糕的解决方法,但就像一个迷人的:)