0

我正在使用 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>
       }
4

3 回答 3

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');
于 2012-07-30T19:04:42.070 回答
1

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

于 2012-07-31T08:01:27.093 回答
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用 s 打开文件,<table>所以应该没有问题。

于 2012-07-30T19:00:23.587 回答