如何在phpexcel中保存多个文件?

时间:2014-05-08 10:32:19

标签: php phpexcel

例如我有5000个数据。 我正在尝试为excel中的每个文件拆分这些数据1000。

看到这个例子:

创建两个工作簿

($objPHPExcelFile1=new PHPExcel(); $objPHPExcelFile2=new PHPExcel();

所以我做了这个

    $jco=1; $jcos=1;
    $trig=0; $rowNya = 2;
    $no = 0;


if ($VinDB->num_rows($result) != 0)
{

    while($line = $VinDB->fetch_array($result)){

        if($trig ==0 )
        {   
            $objPHPExcel[$jcos] = new PHPExcel();
            $objPHPExcel[$jcos]->getProperties()->setCreator("Test")
            ->setLastModifiedBy("Test")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("result file");

            $trig=1;

        }

        $no = $no +1;
        if($jco <= 1000){
        $objPHPExcel[$jcos]->setActiveSheetIndex(0)
            ->setCellValue("A$rowNya", $no)
            ->setCellValue("B$rowNya", @$line["NoTransaksi"])
            ->setCellValue("C$rowNya", @$line["Pesan"])
            ->setCellValue("D$rowNya", @$line["Jam"])
            ->setCellValue("E$rowNya", @$line["Alias"])
            ->setCellValue("F$rowNya", @$line["Nomor_hp"])
            ->setCellValue("G$rowNya", @$line["GroupKU"])
            ->setCellValue("H$rowNya", @$line["Report"])
            ->setCellValue("I$rowNya", @$line["Status"])
            ->setCellValue("J$rowNya", @$line["Token"]);
            $rowNya = $rowNya + 1;
        $jco++; 
        }

        else{
        $jco=1;
        $trig=0;

            $objPHPExcel[$jcos]->getActiveSheet()->setTitle('Simple');
            $objPHPExcel[$jcos]->setActiveSheetIndex(0);


            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="Report_part'.$jcos.'.xls"');
            header('Cache-Control: max-age=0');

            $objWriter[$jcos] = PHPExcel_IOFactory::createWriter($objPHPExcel[$jcos], 'Excel5');
            $objWriter[$jcos]->save('php://output');

        $jcos++;

        }
    }
}

对于前1000个数据,它有一个保存按钮,但对于第2部分,它不起作用。谁能帮我。这是截图:

enter image description here

最新: 好吧..我不能上传多个文件到浏览器,所以我只做多张表并将其保存在我的本地磁盘上,但我如何从我的localhost / server下载它

enter image description here

这是我的代码

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('/xampp/htdocs/sms/Report_'.$jcos.'.xls');
$file = 'sms/Report_'.$jcos.'.xls';
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Content-Length: '.filesize($file));
readfile($file); 

1 个答案:

答案 0 :(得分:2)

您无法向浏览器发送多个文件。将工作簿保存到磁盘,将它们打包到一个文件(例如zip)中,然后将此单个文件发送到浏览器。

修改

在你的while循环之后你可以添加:

$zip = new ZipArchive();
$zip->open('/xampp/htdocs/sms/Reports.zip', ZipArchive::OVERWRITE);
$zip->addGlob('/xampp/htdocs/sms/Report_*.xls');
$zip->close();

请查看docs了解更多选项。

最后:

$file = '/xampp/htdocs/sms/Reports.zip';
header('Content-type: application/zip'); // Please check this, i just guessed
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: '.filesize($file));
readfile($file);