我目前正在使用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}}更改解决了问题(请参阅下面的答案)。
答案 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])) &&