Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存时发生PHPExcel错误_Php_Phpexcel - Fatal编程技术网

保存时发生PHPExcel错误

保存时发生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

我正在使用PHPExcel导出报告

当我在互联网上运行它(使用PHP5.6)时,它给了我一个错误

但是,当我在本地主机上进行测试时,一切正常。工作完美(使用PHP5.4.31)

这是我的密码

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