5

我正在使用 PHPExcel 读取 Excel 模板、填充数据并要求用户下载文件。

generate_excel.php

$objPHPExcel = PHPExcel_IOFactory::load("./template.xlsx");
//populate data ...
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

当我直接从浏览器打开 generate_excel.php 时,会下载结果文件。但是,如果我对 generate_excel.php 进行 ajax 调用,我不会得到下载提示。使用chrome开发者工具,从Network选项卡可以看到ajax调用成功完成,响应数据中看到一堆随机字符。我假设那是 excel 对象。

有谁知道如何使用 ajax 实现下载 excel 功能?我不想刷新页面。当用户点击“导出”按钮时,应该有一个对php文件的ajax调用并提示用户下载。

谢谢!

4

5 回答 5

9

我寻找将带有 ajax 的 JSON 数据传递给 PHP 并返回一个 excel 文件(MySQL 和 PHPExcel)供用户保存的方法。我环顾四周并将一些碎片拼凑在一起,希望它可以帮助某人:

jQuery:

$("#exportBotton").on("click",function(event) {
event.preventDefault();
// create json object;
str_json = JSON.stringify({"key01":val01, "key02":val02, "key03":val03});
        $.ajax({
              type: "post",
              data: str_json,
              url: "../../includes/dbSelect_agentFormExport.php",
              dataType: "json",
              success: function(output){
                          // output returned value from PHP t
              document.location.href =(output.url);
            }
       });
});

PHP:

 $str_json = file_get_contents('php://input');
 $objPHPExcel = new PHPExcel();
 // here i populated objPHPExcel with mysql query result.....

 function saveExcelToLocalFile($objWriter){
    // make sure you have permission to write to directory
    $filePath = '../tmp/saved_File.xlsx';
    $objWriter->save($filePath);
    return $filePath;
}

 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
 $response = array(
     'success' => true,
     'url' => saveExcelToLocalFile($objWriter)
 );
 echo json_encode($response);
 exit();
于 2014-03-19T19:29:22.343 回答
8

并非所有事情都应该使用 AJAX 来完成。有时普通的旧 HTML 更适合工作。我猜你的按钮有a标签?你为什么不做这样的事情

<a href="generate_excel.php" target="_blank">Export to Excel</a>

在你的 HTML 中?注意target="_blank"部分。它可以确保您的页面不会重新加载。

因为input你可以使用构造

<form action="generate_excel.php" target="_blank"><input type="button">...whatever</form>
于 2013-06-27T18:57:05.600 回答
5

我认为您不能通过 ajax 调用下载任何内容。而不是您可以在服务器(临时)中生成并保存 excel 并向用户显示下载链接。

于 2013-06-27T18:54:54.827 回答
3

找到了一种方法来做到这一点,虽然我不确定这是否是一种理想的方法。

我在页面中添加了一个隐藏的 iframe。当ajax调用返回时,它返回创建数据的url。我使用 javascript 将 iframe 重定向到自动触发下载操作的 url。

于 2013-06-27T23:02:19.570 回答
0

你可以这样试试:

  1. 发送带有用于生成 excel 报告的数据的 Jquery AJAX POST 请求,并将该数据存储在会话变量中。返回一个任意字符串,如“成功”作为响应。
  2. 如果上述 AJAX 调用的输出为“成功”,则对应用程序中的另一个 URL 执行 GET 请求,从会话中读取数据(存储在第一步中,否则抛出错误),准备一个 excel 文件该数据,并强制将该excel文件下载到浏览器。
于 2018-04-12T10:13:18.150 回答