我使用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"
));
一旦我在接收它的$.ajax
调用中接收到File
,只需将其添加到锚标签:
$.ajax({
...
success : function(response){
$('#container').append('<a href="'+response.File+'">Here is your file</a>
}
看看这个。
// 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');
接受的对此问题的回答显示了如何在没有mime类型问题的情况下处理成功响应,即提供文件供下载,或由js处理失败响应(例如显示在当前html页面中)
您可以发送
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可以用<table>
打开.html
文件,所以应该不会有任何问题。