js導出excel

来源:http://www.cnblogs.com/suyuanli/archive/2017/12/02/7945102.html
-Advertisement-
Play Games

js導出Excel的方法 利用html的table表格的格式書寫想要的excel格式 獲取table的內容並組裝成一個xls格式的字元串 利用Blob對象生成一個xls格式的文件 利用a標簽的download屬性創建文件名,並下載到本地 例子: "js導出Excel" table表格內容 先寫一個正 ...


js導出Excel的方法

  • 利用html的table表格的格式書寫想要的excel格式
  • 獲取table的內容並組裝成一個xls格式的字元串
  • 利用Blob對象生成一個xls格式的文件
  • 利用a標簽的download屬性創建文件名,並下載到本地

例子:js導出Excel

table表格內容

先寫一個正常的html表格

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style media="screen">
    .tableA {
      border-collapse: collapse;
    }
    .tableA .title th{
      height: 50px;
      font-size: 24px;
      font-family: '微軟雅黑';
      font-weight: 700;
    }
    .tableA tr th {
      border: 1px #000 solid;
      height: 40px;
      background: #efefef;
    }
    .tableA tr td {
      padding: 0 40px;
      border: 1px #000 solid;
      height: 40px;
      text-align: center;
    }
    .tableA .footer td {
      font-size: 20px;
      font-weight: 700;
    }
  </style>
</head>
<body>
  <table bordercolor="black" class="tableA">
    <tr class="title">
      <th colspan="4">學生信息</th>
    </tr>
    <tr>
      <th>名字</th>
      <th>性別</th>
      <th>年齡</th>
      <th>班級</th>
    </tr>
    <tr>
      <td>小明</td>
      <td></td>
      <td>19</td>
      <td>1班</td>
    </tr>
    <tr>
      <td>小黃</td>
      <td></td>
      <td>20</td>
      <td>2班</td>
    </tr>
    <tr>
      <td>老王</td>
      <td></td>
      <td>29</td>
      <td>3班</td>
    </tr>
    <tr class="footer">
      <td colspan="4">總人數:3人</td>
    </tr>
  </table>
</body>
</html>

來看看在瀏覽器顯示的效果如下,在這裡我是給table增加了樣式的:
瀏覽器顯示效果

獲取table的內容裝成一個xls格式的字元串

接下來就是獲取table的html內容了,裡面包括標簽的class或id等。

var oHtml = document.getElementsByClassName('tableA')[0].outerHTML;

這裡將table和style組成一個html,
【附上es6字元串模板鏈接[es6字元串模板][1]】
[1]:http://es6.ruanyifeng.com/#docs/string#模板字元串 "es6字元串模板"

// 這裡我是用了es6的字元串語法``和${},對es6不熟悉的同學可以去查一下。
// 有沒有發現我這裡的樣式就是和HTML上的style複製下來的,
  var excelHtml = `
    <html>
      <head>
        <meta charset='utf-8' />
        <style>
          .tableA {
            border-collapse: collapse;
          }
          .tableA .title th{
            height: 50px;
            font-size: 24px;
            font-family: '微軟雅黑';
            font-weight: 700;
          }
          .tableA tr th {
            border: 1px #000 solid;
            height: 40px;
            background: #efefef;
          }
          .tableA tr td {
            padding: 0 40px;
            border: 1px #000 solid;
            height: 40px;
            text-align: center;
          }
          .tableA .footer td {
            font-size: 20px;
            font-weight: 700;
          }
        </style>
      </head>
      <body>
        ${oHtml}
      </body>
    </html>
  `;

生成xls文件並通過a標簽下載到本地

前面的準備工作就差不多了,接下來就是將字元串轉成xls文件了,這裡主要利用Blob對象和URL.createObjectURL() 方法

  • Blob對象表示不可變的類似文件對象的原始數據。Blob表示不一定是JavaScript原生形式的數據。 File 介面基於Blob,繼承了 blob的功能並將其擴展使其支持用戶系統上的文件。
  • URL.createObjectURL() 靜態方法會創建一個 DOMString,其中包含一個表示參數中給出的對象的URL。這個 URL 的生命周期和創建它的視窗中的 document 綁定。這個新的URL 對象表示指定的 File 對象或 Blob 對象。

Blob 構造函數用法舉例(生成一個json文件):

var debug = {hello: "world"};
var blob = new Blob([JSON.stringify(debug, null, 2)],
  {type : 'application/json'});

同樣道理利用第二個步驟的字元串生成Excel

var excelBlob = new Blob([excelHtml], {type: 'application/vnd.ms-excel'})

最後一步就是通過a標簽下載到本地了,下載前可以利用a標簽的download屬性命名

// 創建一個a標簽
var oA = document.createElement('a');
// 利用URL.createObjectURL()方法為a元素生成blob URL
oA.href = URL.createObjectURL(excelBlob);
// 給文件命名
oA.download = '學生名單.xls';
// 模擬點擊
oA.click();

最後生成的xls效果如下:
js導出excel效果圖
可以看出和瀏覽器的樣式除了涉及到px的會有偏差,其它設置都是生效的,只要微調一下就可以達到想要的效果了

ps:因為許可權問題,生成的excel的格式只能為.xls而且每次打開都會彈窗詢問。所以建議打開後另存一份excel


本文為原創作品,轉載請註明出處:http://www.cnblogs.com/suyuanli/p/7945102.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、js的簡介 (1)js是什麼? js是可以嵌入到html中,是基於對象和事件驅動的腳本語言。 特點: 交互性 安全性:js不能訪問本地磁碟 跨平臺:瀏覽器中都具備js解析器 (2)js能做什麼 js能動態的修改(增刪)html和css的代碼 能動態的校驗數據 (3)js的歷史及組成 BOM(瀏覽 ...
  • 內容為整理博主文章: "https://juejin.im/user/58870f04128fe10065efc8d9/article" 個人覺得他對Operators的解說較容易理解和全面,顧把它們整理在一起,也方面查找。 Operators: Observable 的 Operators 是實例 ...
  • s中的this總是讓人,是js眾所周知的坑之一。 總結一下,this的坑分為5種。 1.全局代碼中的this。 alert(this);//window 全局範圍內this將會全局,在瀏覽器window 2.作為單純函數調用 這裡this指向全局對象,就是window。在嚴格模式中,則undefie ...
  • 一般認為:嚴格模式下this不允許指向全局對象。 如:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 需要說明的是:本身指向全局的this是沒有問題的。 示例代碼: 控制台輸出為window對象(全局對象): 嚴格 ...
  • 查找基本分類如下: 1. 線性表的查找 順序查找 折半查找 分塊查找 2. 樹表的查找 二叉排序樹 平衡二叉樹 B樹 B+樹 3. 散列表的查找 今天介紹 二叉排序樹 。 二叉排序樹 ( Binary Sort Tree ) 又稱為 二叉查找樹 ,它是一種對排序和查找都很有用的特殊二叉樹。 1. 二 ...
  • 常用無返回值的事件 onabort圖像載入被中斷 onblur 元素失去焦點 onfocus 元素獲得焦點 onreset 重置按鈕被點擊 onselect 文本被選中 onsubmit 確認按鈕被點擊 onchange 域的內用被改變 onclick 當用戶點擊某個對象時調用的事件 ondblcl ...
  • 今天在寫代碼的時候,我犯了一個很low的錯誤,廢話不多說,直接上代碼: 大家看到之後,第一反應肯定會認為是個語法錯誤,可是自己仔細想想,這是什麼原因?似乎還不能解釋清楚,好奇寶寶模式立即啟動,經過查閱相關資料得到了答案,接下來我們一起來探討下其中的原理。 疑惑解答 大家有沒有考慮過為什麼上面這種寫法 ...
  • 使用XHR發送一個json請求一般是這樣: 使用fetch的實例: Fetch參數 fetch(input [,init]) input(必須) 定義要獲取的資源(請求地址) init(可選) 參數 | 描述 method 請求使用的方法,如GET、POST headers http請求頭(user ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...