繁体   English   中英

生成PDF时PHPExcel中的Countifs问题

[英]Issue with Countifs in PHPExcel when generating a PDF

我对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库是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)仅会给我单元格的值,并且在阅读文档后会忽略公式,我意识到这是不正确的。 有没有一种方法可以只获取不带公式的单元格的值?

如果我设置$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")

问题根本与分隔符无关,仅当您将公式直接插入PHPExcel时,这才是问题。

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

当您需要设置语言环境时,并在插入之前使用翻译方法。 内部(在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仅读取单元格内容,而不读取样式,格式掩码,打印设置,条件样式等,但是公式仍然是单元格内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM