如何在php中使用simplexlsxgen在 AJAX javascript中生成工作表并下载,同时使用ajax将jascript中的JS数组共享到php

fumotvh3  于 2023-03-21  发布在  PHP
关注(0)|答案(1)|浏览(121)

我一直在尝试用simplexlsxgen(PHP)生成excel工作表并下载

这也是我的Github文档

Link

我需要什么

1.我的javascript中有一个JSON数组,我必须通过javascript AJAX 将其传递到PHP文件,在此生成Excel工作表并将其下载到本地磁盘

我试过的示例代码

在我的index.php文件中

<html>
<body>
<a href="export.php">Export to Excel Sheet</a>
</body>
</html>

我的export.php文件中

<?php
include ("SimpleXLSXGen.php");

$books = [
  
    ['Monday', 'App', 'Lynley Dodd', 'Mallinson Rendel', 'NZ'],
    ['',       'Pos', 'Lynley Dodd', 'Mallinson Rendel', 'NZ']
    
];
$xlsx = Shuchkin\SimpleXLSXGen::fromArray( $books );
$xlsx->mergeCells('A3:A5');
$xlsx->mergeCells('A6:A8');
$xlsx->mergeCells('A9:A11');
$xlsx->mergeCells('A12:A14');
$xlsx->mergeCells('A15:A17');
$xlsx->mergeCells('A18:A20');
$xlsx->mergeCells('A21:A23');
$xlsx->mergeCells('A24:A26');
$xlsx->mergeCells('C1:L1');
$xlsx->saveAs('books.xlsx');
 $xlsx->downloadAs('books.xlsx');

?>

结论

1.如果我使用上面的代码,数组将转换为Excel工作表并成功下载。
问题
我的javascript文件中有数组,所以我必须使用 AJAX javascript将数组从我的Javascript传递到我的PHP文件。

$.ajax({
  url: 'export.php',
  data: {
  books:books
      },
      type: 'POST',
      success: function(response) {
                   
      }
      });

1.但如果我只是像这样传递数据,Excel工作表不会下载。

我试过的替代代码

在我的index.php文件中

<html lang="en">
<head>
    <title>JS array to Excel</title>
</head>
<script>

    function array2excel() {
        var books = [
            ["ISBN", "title", "author", "publisher", "ctry"],
            [618260307, "The Hobbit", "J. R. R. Tolkien", "Houghton Mifflin", "USA"],
            [908606664, "Slinky Malinki", "Lynley Dodd", "Mallinson Rendel", "NZ"]
        ];
        var json = JSON.stringify(books);
    
        var request = new XMLHttpRequest();
    
        request.onload = function () {
            if (this.status === 200) {
                var file = new Blob([this.response], {type: this.getResponseHeader('Content-Type')});
                var fileURL = URL.createObjectURL(file);
                var filename = "", m;
                var disposition = this.getResponseHeader('Content-Disposition');
                if (disposition && (m = /"([^"]+)"/.exec(disposition)) !== null) {
                    filename = m[1];
                }
                var a = document.createElement("a");
                if (typeof a.download === 'undefined') {
                    window.location = fileURL;
                } else {
                    a.href = fileURL;
                    a.download = filename;
                    document.body.appendChild(a);
                    a.click();
                }
            } else {
                alert("Error: " + this.status + "  " + this.statusText);
            }
        }
        
        request.open('POST', "array2excel.php");
        request.responseType = "blob";
        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        request.send("array2excel=" + encodeURIComponent(json));
    }
    </script>
    <body>
    <input type="button" onclick="array2excel()" value="array2excel" />
    </body>
    </html>

在我的array2excel.php文件中

<?php // array2excel.php
if (isset($_POST['array2excel'])) {
    require __DIR__.'/simplexlsxgen/src/SimpleXLSXGen.php';
    $data = json_decode($_POST['array2excel'], false);
    \Shuchkin\SimpleXLSXGen::fromArray($data)->downloadAs('file.xlsx');
    return;
}
?>

Alternative代码问题

1.文件正在下载,但文件已损坏,并已下载为HTML文件,而不是Excel工作表文件。

我需要什么

1.我需要通过我的JSON数组,这是在我的javascript到export/array2excel.php文件使用javascript AJAX 使用的post方法
1.欢迎提出任何替代方案。

w41d8nur

w41d8nur1#

如果你得到一个html文件(当调用simpleXLSXGen时,那么你有一个语法错误或运行时错误(文件找不到,权限被拒绝...,所需的文件找不到等)。尝试分别测试生成器和程序的其余部分。

相关问题