首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHPExcel array_filter()错误

PHPExcel array_filter()错误
EN

Stack Overflow用户
提问于 2014-11-11 20:58:32
回答 1查看 1.2K关注 0票数 1

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

问题是,当我尝试这样做(使用基本实践代码,如下所示)时,我会得到以下三个错误:

代码语言:javascript
复制
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行

代码语言:javascript
复制
$arguments['date'] = array_filter($arguments['date']);
$arguments['time'] = array_filter($arguments['time']);
$arguments['dateTime'] = array_filter($arguments['dateTime']);

我的测试代码:

代码语言:javascript
复制
<?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文档解决了我的问题,如下所示:

代码语言:javascript
复制
<?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");

?>

安非他明的回答也告诉我,改变AutoFilter.php解决了这个问题(见下面的答案)。

EN

Stack Overflow用户

回答已采纳

发布于 2014-11-11 22:30:48

这些警告是由PHPExcel 1.8.0在使用前不初始化数组索引引起的。为了摆脱它们,应用这个补丁

代码语言:javascript
复制
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])) &&
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26874445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档