首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

網頁表格匯出 Excel 的 JavaScript 實作方案

     編輯:.NET 實例教學

在傳統 ASP.NET WebForms 或傳統 ASP 頁面中,若需將客戶端 HTML <table> 直接匯出為 Excel 檔(.xls),可利用 Excel 應用程式的 COM 物件(clsid:0002E510-0000-0000-C000-000000000046)配合 JavaScript 完成。此法需客戶端已安裝 Excel 2000 或更新版本,且瀏覽器為 Internet Explorer(需啟用 ActiveX)。

核心原理

  1. 在頁面動態建立一個隱藏的 <OBJECT> 元素,類別 ID 指向 Excel.Sheet。
  2. 將目標 <table> 的 outerHTML 指派給該物件的 HTMLData 屬性。
  3. 呼叫 ActiveSheet.Export 將資料匯出至指定路徑(或提供下載)。

完整程式碼範例

<script type="text/javascript">
function exportExcel(tblData) {
    // 確保只建立一次 COM 物件
    if (typeof(EXPORT_OBJECT) != "object") {
        document.body.insertAdjacentHTML("afterBegin",
            '<OBJECT style="display:none" classid="clsid:0002E510-0000-0000-C000-000000000046" id="EXPORT_OBJECT"></OBJECT>');
    }

    with (EXPORT_OBJECT) {
        DataType = "HtmlData";
        HTMLData = tblData.outerHTML; // 取得完整表格 HTML
        try {
            // 匯出至用戶端本機路徑(需信任網站、IE 安全性設定允許)
            ActiveSheet.Export("C:\\ExportedData.xls", 0);
            alert("匯出 Excel 檔案完成!");
        } catch (e) {
            alert("匯出失敗,請確認:\n1. 已安裝 Excel 2000 或以上版本\n2. 未開啟同名 .xls 檔案\n3. IE 安全性設定允許 ActiveX 執行");
        }
    }
}
</script>

<table id="tblData" border="1">
    <tr><th>姓名</th><th>年齡</th></tr>
    <tr><td>張三</td><td>28</td></tr>
    <tr><td>李四</td><td>32</td></tr>
</table>
<br />
<input type="button" value="匯出為 Excel" onclick="exportExcel(tblData)" />

注意事項與限制

  • 僅支援 Internet Explorer(需啟用「對未標示為安全的 ActiveX 控制項初始化並編寫腳本」)。
  • 客戶端必須安裝 Excel;無 Office 環境(如 Mac、Linux、純伺服器端)無法使用。
  • 匯出路徑為客戶端本機絕對路徑,現代瀏覽器安全性機制多會阻擋寫入磁碟;實務上常改用伺服器端產生 Excel 檔案再提供下載(如 NPOI、EPPlus、ClosedXML)。
  • 大量資料時效能較差,易導致瀏覽器無回應。

現代替代方案建議

若專案為 ASP.NET Core / MVC / Razor Pages 或跨平台需求,強烈建議改用伺服器端程式庫:

  • EPPlus(.xlsx,功能豐富,商業授權)
  • NPOI(.xls/.xlsx,開源免費)
  • ClosedXML(.xlsx,API 友善,開源)

伺服器端產生檔案後,透過 File() 回傳 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 供使用者下載,相容性與安全性皆大幅提升。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved