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

C# 將資料匯出 Word 文件的簡易方案:HTML 轉 Word 技巧

     編輯:ASP.NET 基礎

核心概念

Word(.doc)支援開啟 HTML 格式檔案。利用此特性,我們只需將資料組裝為**符合 Word 開啟規範的 HTML 字串**,再以 `.doc` 副檔名儲存,即可達到「匯出 Word」效果,無需引用 `Microsoft.Office.Interop.Word`、無需安裝 Office、無版本相容性問題、執行速度極快。

完整實作程式碼

using System;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms; // 僅為 MessageBox Demo

public class WordExporter
{
    /// 建立 Word 相容 HTML 模板
    public string BuildWordHtml(string tableHtml)
    {
        var sb = new StringBuilder();
        sb.AppendLine("");
        sb.AppendLine("");
        sb.AppendLine("匯出文件");
        sb.AppendLine("");
        sb.AppendLine(tableHtml); // 已包含  標籤
        sb.AppendLine("");
        return sb.ToString();
    }

    /// 儲存為 .doc 檔案
    public bool SaveAsDoc(string filePath, string htmlContent)
    {
        try
        {
            // Encoding.Default 對應系統預設編碼(中文環境為 Big5/GB2312),Word 開啟較無亂碼
            using (var sw = new StreamWriter(filePath, false, Encoding.Default))
            {
                sw.Write(htmlContent);
            }
            return true;
        }
        catch (Exception ex)
        {
            // 記錄日誌 ex.ToString()
            return false;
        }
    }

    /// 示範:將 DataSet 多張表匯出為單一 Word
    public void ExportDataSetToWord(DataSet ds, string savePath)
    {
        var allTablesHtml = new StringBuilder();

        foreach (DataTable dt in ds.Tables)
        {
            var tableHtml = new StringBuilder();
            tableHtml.AppendLine("
"); // 表標題 tableHtml.AppendLine($""); // 欄位標題 tableHtml.Append(""); foreach (DataColumn col in dt.Columns) tableHtml.Append($""); tableHtml.AppendLine(""); // 資料列 foreach (DataRow row in dt.Rows) { tableHtml.Append(""); foreach (DataColumn col in dt.Columns) tableHtml.Append($""); tableHtml.AppendLine(""); } tableHtml.AppendLine("
{dt.TableName}
{col.ColumnName}
{row[col]}
"); allTablesHtml.Append(tableHtml); } string fullHtml = BuildWordHtml(allTablesHtml.ToString()); if (SaveAsDoc(savePath, fullHtml)) MessageBox.Show("匯出成功!"); else MessageBox.Show("匯出失敗,請檢查路徑權限。"); } }

WinForm / ASP.NET 呼叫範例

// WinForm
private void btnExport_Click(object sender, EventArgs e)
{
    string path = Path.Combine(Application.StartupPath, "Report.doc");
    var ds = GetReportData(); // 你的查詢邏輯
    new WordExporter().ExportDataSetToWord(ds, path);
}

// ASP.NET (Web Forms)
protected void btnExport_Click(object sender, EventArgs e)
{
    string path = Server.MapPath("~/Exports/Report.doc");
    var ds = GetReportData();
    new WordExporter().ExportDataSetToWord(ds, path);
    Response.Clear();
    Response.ContentType = "application/msword";
    Response.AppendHeader("Content-Disposition", "attachment; filename=Report.doc");
    Response.WriteFile(path);
    Response.End();
}

優缺點分析

優點 缺點/限制
零依賴、無需安裝 Office 無法使用 Word 進階排版:分頁符、頁首頁尾、書籤、目錄、追蹤修訂
速度極快(字串組裝 + 寫檔) 複雜樣式(欄位合併、嵌套表格、浮水印)需手寫 HTML/CSS,維護困難
跨平台(Linux Docker 可用) 大量資料(>5 萬列)HTML 字串過大,記憶體壓力大
程式碼簡潔、易除錯 Word 開啟時可能彈出「格式不符」警告(實際可正常顯示)

進階替代方案比較

方案 適用場景 複雜度
HTML 轉 .doc (本文)簡單表格報表、清單匯出、內部工具低
Open XML SDK (DocumentFormat.OpenXml)需精確控制 Word 結構、樣式、分頁、商業報表中
NPOI (HWPF/XWPF)需支援 .doc/.docx、不想装 Office、Java 移植專案中
Interop.Word (COM)需列印、轉 PDF、套用範本、伺服器端已裝 Office(不建議 Server 端用)高
第三方報表元件複雜分組、交叉表、圖表、多格式匯出高

結論

若需求為「快速把 GridView/DataTable 資料匯出給使用者用 Word 開啟檢視/列印」,**HTML 轉 .doc 是最高 CP 值方案**;若需精密排版、分頁控制、商業級報表,請投資學習 Open XML SDK。

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