我目前正在使用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 665AutoFilter.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");
?>安非他明的回答也告诉我,这改变AutoFilter.php解决了这个问题(见下面的答案)。
发布于 2014-11-11 22:30:48
这些警告是由PHPExcel 1.8.0在使用前不初始化数组索引引起的。为了摆脱它们,应用这个补丁
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])) &&https://stackoverflow.com/questions/26874445
复制相似问题