生成PDF时PHPExcel中的Countifs问题

时间:2014-04-09 06:53:27

标签: php phpexcel dompdf

我有PHPExcel的问题,似乎找不到解决方法来解决它。 我根据PHPExcel文档中提供的基本示例编写了一个脚本,用XLSX文件创建PDF文件,我的代码如下所示:

$inputfile = “test.xlsx”;
$objReader = PHPExcel_IOFactory::createReaderForFile($inputfile);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputfile);

[…]

$objWriter = new PHPExcel_Writer_PDF($objPHPExcel);
$objWriter->setSheetIndex(0);
$objWriter->setPreCalculateFormulas(true);
$objWriter->save("test.pdf");

我使用的PDF Writer Library是DomPDF 现在的问题是,当我尝试使用我正在处理的特定文件创建PDF时,上面的代码将返回错误。

Fatal error: Uncaught exception 'PHPExcel_Calculation_Exception' with message 'Sheet!C5 -> Formula Error: Wrong number of arguments for COUNTIFS() function: 4 given, 2 expected' in D:\xampp\htdocs\doc\phpxls\Classes\PHPExcel\Cell.php:300 Stack trace: #0 D:\xampp\htdocs\doc\phpxls\Classes\PHPExcel\Writer\HTML.php(1174): PHPExcel_Cell->getCalculatedValue() #1 D:\xampp\htdocs\doc\phpxls\Classes\PHPExcel\Writer\HTML.php(436): PHPExcel_Writer_HTML->_generateRow(Object(PHPExcel_Worksheet), Array, 4) #2 D:\xampp\htdocs\doc\phpxls\Classes\PHPExcel\Writer\PDF\DomPDF.php(109): PHPExcel_Writer_HTML->generateSheetData() #3 [internal function]: PHPExcel_Writer_PDF_DomPDF->save('testing.pdf') #4 D:\xampp\htdocs\doc\phpxls\Classes\PHPExcel\Writer\PDF.php(87): call_user_func_array(Array, Array) #5 D:\xampp\htdocs\doc\interface\xls2pdf_2.php(59): PHPExcel_Writer_PDF->__call('save', Array) #6 D:\xampp\htdocs\doc\interface\xls2pdf_2.php(59): PHPExcel_Writer_PDF->save('testing.pdf') #7 {main} thrown in D:\xampp\htdocs\doc\phpxls\Classes\PHPExcel\Cell.php on line 300

你可以看到它是关于“COUNTIFS()”的东西我的假设是setReadDataOnly(true)只会给我单元格的值并在阅读文档后忽略公式我意识到这不是真的。有没有办法只获得没有公式的Cell值?

如果我设置$objWriter->setPreCalculateFormulas(false);

它可以正常工作,但返回的PDF文件将显示公式而不是单元格中的计算值(显然)

有没有办法让这项工作像我预期的那样?只是读/写值并忽略公式?

我怀疑该错误与公式中的分隔符有关,我使用的本地格式(德语)是分号,但美国/标准格式是逗号,所以公式在原始中看起来像这样文件

=ZÄHLENWENNS(Migration_LSA!$AR$2:$AR$121;">=1/4/2014";Migration_LSA!$AR$2:$AR$121;"<=30/4/2014")

理论上应该在PHPExcel中看起来像这样。

=COUNTIFS(Migration_LSA!$AR$2:$AR$121,">=1/4/2014",Migration_LSA!$AR$2:$AR$121,"<=30/4/2014")

1 个答案:

答案 0 :(得分:0)

问题根本不在于分隔符,如果您直接将公式插入PHPExcel中,这只是一个问题

=ZÄHLENWENNS(Migration_LSA!$AR$2:$AR$121;">=1/4/2014";Migration_LSA!$AR$2:$AR$121;"<=30/4/2014")

何时需要设置区域设置,并在插入之前使用translate方法。在内部(在PHPExcel和MS Excel中)公式以英语/美国格式表示。 MS Excel GUI通过插入/显示自动翻译为您隐藏。

目前,PHPExcel中的COUNTIFS()公式仅适用于单个范围/条件对。

您可以通过将多个范围/标准对分成单个范围/标准对并将它们添加到一起来解决此问题,因此:

=COUNTIFS(Migration_LSA!$AR$2:$AR$121,">=1/4/2014") +
    COUNTIFS(Migration_LSA!$AR$2:$AR$121,"<=30/4/2014")

setReadDataOnly(true)告诉PHPExcel Reader只读取单元格内容,而不是读取样式,格式掩码,打印设置,条件样式等...但公式仍然是单元格内容