首页 > 解决方案 > PHP 用 xlsxwriter / ajax / 导出 xlsx 文件

问题描述

我对 PHP 的 xlsxwriter 库有疑问。我有一个 mysql 数据库,我想用一个按钮从 db 下载数据到一个 excel 文件中。如果我将 url 粘贴到 webbrowser 栏中,它会生成并正确下载 excel 文件(链接示例https://www.example.com/inc/service.php?action=downloadXls&gestione=2 ")但是如果我使用 ajax 调用

 $("#frmfileima").submit(function(e){
     e.preventDefault();                
      var fdate = $('#firstdate').val();
      var ldate = $('#lastdate').val();                 
        $.ajax({
        method: "GET",
        url: "inc/service.php?action=downloadXls&gestione=4",
        data: {fdate: fdate, ldate: ldate},
        });                                 
      });

没啥事儿。在 chrome 预览中我只能看到这段代码

PKDN   docProps/PKDNÈì«docProps/app.xmlÏ1Â0àÝ_Q²ÛTIÓAqv¨î!¹j ¹É)í¿7"ØÝí>Þ©n
cõ=a+6u#*@KÎã½×þ¼Þ*³AgFBhÅYtz¥."$ö«"`nÅ9¤ÌöÁäºÔXR0\bºKoáDöYnf'ab@n øÿ:²}ùÖϱxZõÄfì}Ý(¹u¤
ÎZÉåZ>ÓoPKDN4îWp6DdocProps/core.xmlmÁNÃ0Dï|Eä{b'-U±ôê   $$@ܽ´Ä±ìmÓþ=NÒõ¶ã}Z{/öuíÀyݤ #Ù(mÖy]-ã9<
£DÕ(È<Y7¹´\6]cÁ¡ñ\Úl-§ÔË
ÔÂ'!aùÕ¸Z`nM­?b

我认为是文件 xlsx 代码源。

在 service.php 我尝试了所有类型的标题

header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=".XLSXWriter::sanitize_filename($filename)."");
header("Pragma: no-cache");
header("Expires: 0");

如何?问题出在哪里?多谢

标签: phpmysqlajaxexcelxlsxwriter

解决方案


您不能只使用 JavaScript 通过 AJAX 下载文件并将其保存到用户的计算机,因为这会带来安全问题。您将不得不使用变通方法。有两个通用选项:

  • 将浏览器重定向到您的下载 URL,最好是作为新选项卡。您可以像这样提供在 URL 中编码的数据:
$("#frmfileima").submit(function(e) {
    e.preventDefault();
    var fdate = $('#firstdate').val();
    var ldate = $('#lastdate').val();
    window.open('inc/service.php?action=downloadXls&gestione=4&fdate=' + encodeURIComponent(fdate) + '&ldate=' + encodeURIComponent(ldate), '_blank');                               
});
  • 如果您想更好地控制您的下载,您可以使用一个 jQuery 插件,例如这个,它为您提供了类似 AJAX 的下载功能。

推荐阅读