如何在不在本地存储的情况下直接将EXCEL文件输出给用户?

时间:2012-07-30 18:56:01

标签: php ajax phpexcel

我正在使用PHPExcel生成excel文件(疯狂吧?),我从数据库获取的信息,就是每当我创建文件时它保存在服务器中然后我只是发送一个链接到该文件到用户以便他可以访问它。

我怀疑这是正确的做法,我正在寻找的只是将文件发送到浏览器而不将其保存在服务器上。

如何直接向用户输出EXCEL文件而不在本地存储?

代码:

$fileName  = "Request_" . $idRequest . "_Update.xls";
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$objWriter->save($fileName);
$objPHPExcel = PHPExcel_IOFactory::load($fileName);


echo json_encode(array(
        "ExitCode" => 0,
        "Message" => "Success",            
        "data" => $request,
        "File" => "../reports/$fileName"
    ));

我收到File来电时收到$.ajax,只需将其添加到锚标记中即可:

$.ajax({
       ...
       success : function(response){
           $('#container').append('<a href="'+response.File+'">Here is your file</a>
       }

3 个答案:

答案 0 :(得分:2)

检查一下。

//    reset all output buffering
    while (ob_get_level() > 0) {
        ob_end_clean();
    }
    header('Content-type: application/ms-excel');
    header('Content-Disposition:  inline; attachment; filename='.$filename);

    // we can't send any more headers after this
    flush();

    $excel = new PhpExcel();
    $excel->setActiveSheetIndex(0);
    $sheet = $excel->getActiveSheet();
    // in this example, $data was an array in the format row => value
    //  data structure is not relevant to issue
    foreach ($data as $key => $value) {
         // add data to sheet here
         $sheet->SetCellValue('A' . $key, $value);
         // etc...
    }
    $writer = new PHPExcel_Writer($excel);
    // push to browser
    $writer->save('php://output');

答案 1 :(得分:1)

您可以发送

header("Content-Disposition: attachment; filename=\"file.xls\"");

强制下载,然后

header("Content-type:application/vnd.ms-excel");

说你正在发送excel文件的浏览器,最后只是将文件作为html table回显:

<?php
header("Content-Disposition: attachment; filename=\"file.xls\"");
header("Content-type:application/vnd.ms-excel");
echo "<html><table>...</table></html>";  // your table data here..
?>

Excel可以使用.html打开<table>个文件,这样就不会出现任何问题。

答案 2 :(得分:1)

this question的已接受响应显示了如何处理成功响应提供下载文件,或由js处理的失败响应(例如,在当前html页面中显示)而没有mime类型问题