保存时发生PHPExcel错误
我正在使用PHPExcel导出报告 当我在互联网上运行它(使用PHP5.6)时,它给了我一个错误 但是,当我在本地主机上进行测试时,一切正常。工作完美(使用PHP5.4.31) 这是我的密码保存时发生PHPExcel错误,php,phpexcel,Php,Phpexcel,我正在使用PHPExcel导出报告 当我在互联网上运行它(使用PHP5.6)时,它给了我一个错误 但是,当我在本地主机上进行测试时,一切正常。工作完美(使用PHP5.4.31) 这是我的密码 function downloadExcelBrand($brand,$tglAwal,$tglAkhir) { $this->load->library('php_excel'); $objPHPExcel = new PHPExcel(); // print_r
function downloadExcelBrand($brand,$tglAwal,$tglAkhir)
{
$this->load->library('php_excel');
$objPHPExcel = new PHPExcel();
// print_r($objPHPExcel);die();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', "Concept");
$objPHPExcel->getActiveSheet()->SetCellValue('B1', $brand);
$objPHPExcel->getActiveSheet()->SetCellValue('A2', "Period");
$objPHPExcel->getActiveSheet()->SetCellValue('B2', $tglAwal." to ".$tglAkhir);
$objPHPExcel->getActiveSheet()->SetCellValue('A5', "Boutique");
$objPHPExcel->getActiveSheet()->SetCellValue('B5', "Q1");
$objPHPExcel->getActiveSheet()->SetCellValue('C5', "Q2");
$objPHPExcel->getActiveSheet()->SetCellValue('D5', "Q3");
$objPHPExcel->getActiveSheet()->SetCellValue('E5', "Q4");
$objPHPExcel->getActiveSheet()->SetCellValue('F5', "BBC Score");
$data = $this->surveymodel->getDataLaporanBrand($brand,$tglAwal,$tglAkhir);
// print_r($data);die();
$i = 5;
foreach ($data as $index=>$value) {
// print_r($data[$index+1]);die();
if( $index%4 == 0){
$i++;
// print_r($value["Score"]);print_r($value['TotalData']);die();
$AvgQ1 = $value["Score"] / $value['TotalData'];
// print_r($AvgQ1);die();
$AvgQ2 = $data[$index+1]["Score"]/$data[$index+1]['TotalData'];
$AVGQ3 = $data[$index+2]["Score"]/$data[$index+2]['TotalData'];
$AvgQ4 = $data[$index+3]["Score"]/$data[$index+3]['TotalData'];
$BSC = $AvgQ1+$AvgQ2+$AVGQ3+$AvgQ4;
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$i, $value["boutiqueID"]);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$i, $AvgQ1);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$i, $AvgQ2);
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, $AVGQ3);
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $AvgQ4);
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$i, $BSC);
}
}
// Instantiate a Writer to create an OfficeOpenXML Excel .xlsx file
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
// Write the Excel file to filename some_excel_file.xlsx in the current directory
header('Content-type: application/vnd.ms-excel');
// It will be called file.xls
header('Content-Disposition: attachment; filename="Report_By_Brand.xlsx"');
// Write file to the browser
$objWriter->save('php://output');
}
当我删除$objWriter->save命令时,会发生奇怪的事情php://output');代码>代码。它要求保存excel,但excel文件已损坏,无法打开
*编辑
- 错误是
无法访问此网站
位于的网页可能暂时关闭,或者可能已永久移动到新的网址。
错误\u无效\u响应
*更新
- 我尝试添加
ob_end_clean()代码>或ob_clean()代码>在$objWriter->save()之前php://output');代码>并保存Excel,但我无法打开它,因为Excel显示“文件格式或文件扩展名无效”
- 我尝试在
filename
属性中将xlsx
扩展名更改为xls
,现在可以打开Excel了。但它显示php错误消息:ob_end_clean():删除缓冲区失败。没有要删除的缓冲区
- 我试图保留扩展名,但删除了
ob_end_clean()代码>,错误再次出现
*解决方案:
- 我把代码改成了这样的
Excel5
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="userList.xls"');
就像冠军一样。谁能解释一下?我会把答案交给能解释的人
添加ob\u end\u clean()
我对4000多行有同样的问题。增加内存限制和时间限制解决了这个问题
ERR_INVALID_响应行为的原因是您发送xls/x头,但由于内存或时间不足,http错误为500
设置时间限制(120);
ini设置(“内存限制”、“256M”);
...
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
ob_end_clean();
$objWriter->save('php://output');
出口
我找到了一个修复程序,请转到Classes/PHPExcel/Writer/Excel2007.php
注释掉以下几行,PHP7有一个wierd返回日期类型,这样做将使PHPExcel能够立即在PHP7中工作。无论如何
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
到
为我工作。尝试安装ZipArchive类,即sudo-apt-get-install php7.0-zip
因为这可能是新形成的服务器的问题。(对我来说)将$writer
输出保存到一个文件并重定向到该文件解决了我的问题
我还将时间限制和内存限制设置得很高,这样它们就不会引起任何问题
代码:
添加ob\u end\u clean()
将删除错误并允许下载文件。但下载的文件仍然无法打开。据说,如果更改标题('Content-type:application/vnd.ms excel'),格式或文件扩展名无效代码>到标题('Content-Type:application/vnd.openxmlformats of icedocument.spreadsheetml.sheet')代码>仍然无法打开该文件。它仍然会显示相同的错误@Jordan Sipahutar您需要确保您提供的文件扩展名与writer匹配,并且与内容类型headerIs匹配。我在顶部编写的代码中的头属性上有任何错误代码吗@马克贝克??我不明白为什么这是主机上的错误。因为在我的本地主机上它工作得很好错误是怎么说的?这里有一个错误@初学者这个网站在http://the-link-in-here 可能暂时关闭,或者可能已永久移动到新的web地址。ERR_INVALID_RESPONSE
我无法提供解释:但如果您查看日志文件,或打开在文本编辑器中生成的文件以查看是否包含任何错误消息,可能会向您提供无法打开的解释生成的文件?我已将扩展名更改为xls
,并使用excel打开它。它显示php错误消息:ob_end_clean():删除缓冲区失败。没有要删除的缓冲区
@markbaker,因此请删除ob\u end\u clean()
谢谢,这对我很有用。我在php7上,可能是以下版本的ob_end_clean将起作用。tnx,你救了我一晚:-)顺便说一句。我在php7.2上,这应该是一个评论。这是对上述问题的回答@wayneOS
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
//$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
//PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
//PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); // instantiate Xlsx
$writer->setPreCalculateFormulas(false);
//ob_end_clean();
set_time_limit(500);
ini_set('memory_limit', '-1');
$writer->save($filename . ".xlsx"); // save the file to root of project
redirect('/' . $filename . ".xlsx"); // redirect the user to the file