我在一对公式上使用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 = "";
这是一个糟糕的解决方法,但就像一个迷人的:)