PHPExcel array_filter()错误

时间:2014-11-11 20:58:32

标签: php phpexcel

我目前正在使用PHPExcel从我目前拥有的模板生成excel文档。我的想法是数据库将更新模板,维护其当前格式,并将文件传递给用户下载。

问题在于,当我尝试这样做时(使用基本练习代码,如下所示),我得到以下三个错误:

Warning: array_filter() expects parameter 1 to be array, null given in D:\web\htdocs\dew\root\Welsh\Scorecard\Classes\PHPExcel\Worksheet\AutoFilter.php on line 663

Warning: array_filter() expects parameter 1 to be array, null given in D:\web\htdocs\dew\root\Welsh\Scorecard\Classes\PHPExcel\Worksheet\AutoFilter.php on line 664

Warning: array_filter() expects parameter 1 to be array, null given in D:\web\htdocs\dew\root\Welsh\Scorecard\Classes\PHPExcel\Worksheet\AutoFilter.php on line 665

AutoFilter.php中的第663-665行

$arguments['date'] = array_filter($arguments['date']);
$arguments['time'] = array_filter($arguments['time']);
$arguments['dateTime'] = array_filter($arguments['dateTime']);

我的测试代码:

<?php

require('/Classes/PHPExcel/IOFactory.php'); 

$objPHPExcel = new PHPExcel();
$objPHPExcel = PHPExcel_IOFactory::load("test.xlsx");
$objPHPExcel->getActiveSheet()->setCellValue('F8','YES_IT_WORKED');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test2.xlsx");

?>

现在,当代码完成运行时,它会生成xlsx文档。但是,该文档隐藏了大部分所有单元格。第一行是可见的,但是隐藏了1到86之间的所有行。



以下是我发现的解决问题的方法:

我使用的excel文档有很多过滤器和奇怪的特定于Excel的格式。我的理论是PHPExcel可能无法处理所有这些条件。告诉代码自动过滤您的Excel文档修复了我的问题,如下所示:

<?php

require('/Classes/PHPExcel/IOFactory.php'); 
$objPHPExcel = new PHPExcel();

$objPHPExcel = PHPExcel_IOFactory::load("test.xlsx");
$objPHPExcel->getActiveSheet()->setCellValue('F8','YES_IT_WORKED');
$objPHPExcel->getActiveSheet()->setAutoFilter($objPHPExcel->getActiveSheet()->calculateWorksheetDimension());
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("Archives/test2.xlsx");

?>

amphetamachine的答案还告诉我AutoFilter.php {{1}}中的{{1}}更改解决了问题(请参阅下面的答案)。

1 个答案:

答案 0 :(得分:2)

警告是由PHPExcel 1.8.0在使用之前初始化数组索引引起的。为了摆脱它们,请应用this patch

diff -ru pex.orig/Classes/PHPExcel/Worksheet/AutoFilter.php pex/Classes/PHPExcel/Worksheet/AutoFilter.php
--- pex.orig/Classes/PHPExcel/Worksheet/AutoFilter.php  2014-03-02 15:27:06.000000000 -0600
+++ pex/Classes/PHPExcel/Worksheet/AutoFilter.php   2014-11-11 15:34:53.582219599 -0600
@@ -634,6 +634,9 @@
                    } else {
                        //  Filter on date group values
                        $arguments = array();
+                       $arguments['date'] = array();
+                       $arguments['time'] = array();
+                       $arguments['dateTime'] = array();
                        foreach($ruleDataSet as $ruleValue) {
                            $date = $time = '';
                            if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_YEAR])) &&