首页 > 解决方案 > 使用 php/js 将生成的数据导出到 excel

问题描述

我有 2 个用户可以选择的日期输入字段(开始日期、结束日期)。选择后,数据将显示在用户提供的两个日期之间以表格格式注册。如何在没有第三方插件的情况下通过单击按钮将表格中显示的数据导出到 Excel 中?

我使用的代码:

<body>

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        startdate: <input type="date" name="from_date">
        enddate: <input type="date" name="to_date">
        <input type="submit" name="date" id="date">
    </form>

    <!--<div>
       
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
            <button type="submit" name="excel" value="excel" id='excel'> Export to excel</button>
        </form>
    </div> --->


    <?php
    require('settings.php');
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    if (isset($_POST["date"])) {
        $startDate = date("Y-m-d", strtotime($_POST['from_date'])); // Y-m-d
        $endDate = date("Y-m-d", strtotime($_POST['to_date'])); // something weird is happening with the dates random dates slip between date ranges


        $sql = "SELECT distinct latestv.* from(
        select distinct Werkomschrijving_nr from POH_GL4 where versie Between ? and ? ) changedw
        left join
        (select distinct Werkomschrijving_nr, max(versie) AS maxdate, omschrijving from POH_GL4 
        group by Werkomschrijving_nr,omschrijving) latestv on latestv.Werkomschrijving_nr = changedw.Werkomschrijving_nr";

        $stmt = $db->prepare($sql);
        $stmt->execute([$startDate, $endDate]);
        $result = $stmt->fetchAll();

        echo "<table>";
        echo "<tr><th>nr werkomschrijving</th><th>Last change date </th><th>Omschrijving</th></tr>";

        foreach ($result as $key => $row) {

            echo "<tr>";
            echo "<td>" . $row['Werkomschrijving_nr'] . "</td>";
            echo "<td>" . $row['maxdate'] . "</td>";
            echo "<td>" . $row['omschrijving'] . "</td>";
            echo "</tr>";
        }}

标签: javascriptphp

解决方案


exportTableToExcel() 函数将 HTML 表格数据转换为 excel 并下载为 XLS 文件 (.xls)。

=> tableID – 必需。指定要从中导出数据的 HTML 表 ID。

=> 文件名——可选。指定下载excel数据的文件名。

js代码:-

function exportTableToExcel(tableID, filename = ''){
    var downloadLink;
    var dataType = 'application/vnd.ms-excel';
    var tableSelect = document.getElementById(tableID);
    var tableHTML = tableSelect.outerHTML.replace(/ /g, '%20');
    
    // Specify file name
    filename = filename?filename+'.xls':'excel_data.xls';
    
    // Create download link element
    downloadLink = document.createElement("a");
    
    document.body.appendChild(downloadLink);
    
    if(navigator.msSaveOrOpenBlob){
        var blob = new Blob(['\ufeff', tableHTML], {
            type: dataType
        });
        navigator.msSaveOrOpenBlob( blob, filename);
    }else{
        // Create a link to the file
        downloadLink.href = 'data:' + dataType + ', ' + tableHTML;
    
        // Setting the file name
        downloadLink.download = filename;
        
        //triggering the function
        downloadLink.click();
    }
}

Html 表:HTML 表包含一些用户数据和一些基本字段,在您的情况下,您有日期,在下面的代码中您可以看到姓名、电子邮件等...

<table id="tblData">
    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Country</th>
    </tr>
    <tr>
        <td>John Doe</td>
        <td>john@gmail.com</td>
        <td>USA</td>
    </tr>
    <tr>
        <td>Michael Addison</td>
        <td>michael@gmail.com</td>
        <td>UK</td>
    </tr>
    <tr>
        <td>Sam Farmer</td>
        <td>sam@gmail.com</td>
        <td>France</td>
    </tr>
</table>

该按钮触发 exportTableToExcel() 函数以使用 JavaScript 导出 HTML 表格数据。

<button onclick="exportTableToExcel('tblData')">Export Table Data To Excel File</button>

如果要使用自定义文件名导出数据,请在 exportTableToExcel() 函数中传递所需的文件名。

<button onclick="exportTableToExcel('tblData', 'members-data')">Export Table Data To Excel File</button>

此代码可帮助您在表格数据中添加导出功能,而无需任何第三方 jQuery 插件或服务器端脚本。您可以使用最少的 JavaScript 代码轻松导出表数据。此外,示例代码的功能可以根据您的需要进行扩展。


推荐阅读