【问题标题】:Issue with Countifs in PHPExcel when generating a PDF生成 PDF 时 PHPExcel 中的 Countifs 问题
【发布时间】:2015-09-04 12:38:00
【问题描述】:

我遇到了 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")

【问题讨论】:

    标签: php phpexcel dompdf


    【解决方案1】:

    问题根本与分隔符无关,如果您将公式直接插入到 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 只读取单元格内容,不读取样式、格式掩码、打印设置、条件样式等...但公式仍然是单元格内容

    【讨论】:

    • 感谢您的快速回答马克,这很不幸,但我想我可以解决它。
    猜你喜欢
    • 2014-03-16
    • 2013-06-05
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多