使用phpexcel保存到临时文件

时间:2018-08-01 19:45:38

标签: php excel phpexcel

我必须在一个临时文件中保存一个excel,但我不知道如何

最初,我以这种方式保存Excel文件

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Autolarte.xlsx"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 
header ('Cache-Control: cache, must-revalidate'); 
header ('Pragma: public'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

现在我想要的是使用该Excel文件的内容创建一个临时文件

我有这个示例,但是由于我不知道excel的内容是什么变量,因此在我的示例中未实现

$temp = tmpfile();
fwrite($temp, "writing in the temporary file");
fseek($temp, 0);
echo fread($temp, 1024);
fclose($temp);

现在是我需要的临时文件,我想在addfile中放入临时文件的路径和名称,以将excel添加到zip

$zipname = 'file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
$zip->addFile('/path/to/index.txt', 'newname.txt');
$zip->addFromString("testfilephp.txt", "#1 This is a test string added as  testfilephp.txt.\n");
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
exit;

2 个答案:

答案 0 :(得分:0)

save()命令保存到文件,但是您现在使用php://output作为文件名来获得直接输出。只需更改它即可。

$tempfile = tempnam();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($tempfile);

不要忘记以后再使用unlink()删除文件。

答案 1 :(得分:0)

   //create a dir temporal
        $tmpHandle = tmpfile();
        $metaDatas = stream_get_meta_data($tmpHandle);
        $tmpFilename = $metaDatas['uri'];
   //create a object tu save de excel file
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
   //save the excel in a temporaly dir
        $objWriter->save($tmpFilename);
   //create the zip
        $zipname = 'file.zip';
        $zip = new ZipArchive;
        $zip->open($zipname, ZipArchive::CREATE);
        $zip->addFile($tmpFilename, 'newname.xlsx');
        $zip->close();
        unlink($tmpFilename);
        fclose($tmpHandle);
        header('Content-Type: application/zip');
        header('Content-disposition: attachment; filename='.$zipname);
        header('Content-Length: ' . filesize($zipname));
        readfile($zipname);
        exit;