使用JavaScript把頁面上的表格導出爲Excel文件[轉]

如果在頁面上展示了一個數據表格,而用戶想把這個表格導出爲Excel文件,那麼在要求不高的情況下,可以不通過服務器生成表格,而是直接利用JavaScript的Blob和Object URL特性將表格導出。不過,醜話說在前頭,這篇隨筆中利用了Excel能打開HTML文檔的特性,所以導出的表格實際上是一個HTML文檔,並且其擴展名只能爲.xls,而不能是.xlsx,否則Excel無法打開。(不過確實見過使用JavaScript生成真正Excel文件的方案,這裏暫不提及。)

實現代碼如下,包含HTML頁面和JavaScript腳本:

複製代碼
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />
    <style>
        /* 此樣式僅用於瀏覽器頁面效果,Excel不會分離表格邊框,不需要此樣式 */
        table {
            border-collapse: collapse;
        }
    </style>
</head>
<body>
    <!-- 設置border="1"以顯示錶格框線 -->
    <table border="1">
        <!-- caption元素可以生成表標題,其單元格列跨度爲表格的列數 -->
        <caption>學生成績表</caption>
        <tr>
            <!-- 可以使用rowspan和colspan來合併單元格 -->
            <th rowspan="2">編號</th>
            <th rowspan="2">學號</th>
            <th rowspan="2">姓名</th>
            <th rowspan="2">性別</th>
            <th rowspan="2">年齡</th>
            <th colspan="3">成績</th>
        </tr>
        <tr>
            <th>語文</th>
            <th>數學</th>
            <th>英語</th>
        </tr>
        <tr>
            <td>1</td>
            <td>2016001</td>
            <td>張三</td>
            <td>男</td>
            <td>13</td>
            <td>85</td>
            <td>94</td>
            <td>77</td>
        </tr>
        <tr>
            <td>2</td>
            <td>2016002</td>
            <td>李四</td>
            <td>女</td>
            <td>12</td>
            <td>96</td>
            <td>84</td>
            <td>89</td>
        </tr>
    </table>

    <a>導出表格</a>

    <script>
        // 使用outerHTML屬性獲取整個table元素的HTML代碼(包括<table>標籤),然後包裝成一個完整的HTML文檔,設置charset爲urf-8以防止中文亂碼
        var html = "<html><head><meta charset='utf-8' /></head><body>" + document.getElementsByTagName("table")[0].outerHTML + "</body></html>";
        // 實例化一個Blob對象,其構造函數的第一個參數是包含文件內容的數組,第二個參數是包含文件類型屬性的對象
        var blob = new Blob([html], { type: "application/vnd.ms-excel" });
        var a = document.getElementsByTagName("a")[0];
        // 利用URL.createObjectURL()方法爲a元素生成blob URL
        a.href = URL.createObjectURL(blob);
        // 設置文件名
        a.download = "學生成績表.xls";
    </script>
</body>
</html>
複製代碼

效果如圖:

打開下載的文件:

使用開發者工具檢查a元素,就能大致明白blob URL的工作原理:

<a href="blob:http://localhost:52347/0ead79dc-1896-4a53-b1f1-dfbafff4e953" download="學生成績表.xls">導出表格</a>

如果想通過按鈕導出文件,可以在按鈕的點擊事件中創建a元素,配置其屬性並觸發其點擊事件。不過在FireFox中,需要先將創建的a元素放入body中,否則無法下載。

轉載:https://www.cnblogs.com/zhuxinghan/p/6063193.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章