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

并在它前面添加 = 有效。

第二个公式我有问题,它是一个条件(同样的问题,它可以生成它但它适用于 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

我发现,异常是故意抛出的:

第 288 行的 PHPExcel/Classes/PHPExcel/Cell.php(当前 PHPExcel 版本 v1.7.6)

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

所以我只是删除了这个异常并返回一个空字符串:

$result = "";

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

于 2012-10-01T13:19:27.813 回答