如何使用C# 將 DataTable 匯出至 Excel:完整教學、方法比較與實務應用

本教學全面介紹C#將DataTable匯出至Excel的實用技巧,包含ClosedXML安裝與使用步驟、主流方法比較、格式自定義、常見錯誤排查及進階應用,適合專案管理、團隊協作與自動化報表需求。

🧮 還在用 Excel 管理專案?試試這些更聰明的工具 🚀

從 Excel 升級到專業專案管理 × 自動化平台

還在用 Excel 追進度?monday.com 幫你把任務、時程、甘特圖、報表全部自動化! 支援 Excel 一鍵匯入,輕鬆轉換成更直覺的視覺化專案看板。 全球 22.5 萬家公司愛用,AI 輔助讓團隊溝通更順暢。
⭐ 最多人使用

從任務到 OKR,一站式專案與團隊協作平台

整合文件、OKR、任務與自動化流程,AI 助你更快完成工作。 也支援從 Excel 匯入專案資料。

輕鬆整理文件 × 規劃專案 × 建立資料庫

Notion AI 幫你自動生成 SOP、專案摘要與任務追蹤頁面。 從 Excel 匯入表格,打造你自己的工作空間。

C# DataTable 匯出 Excel 實用教學(c datatable to excel)

將DataTable資料匯出為Excel檔案,是專案管理、數據分析、報表自動化等領域常見的需求。無論是定期產出營運報表、批次導出資料給團隊協作,還是整合系統數據進行分析,這項技能都能大幅提升工作效率。以下將帶你從方法選擇、步驟詳解到常見問題排查,全面掌握C# DataTable匯出Excel的實務技巧。

應用場景與常見需求

  • 專案管理報表自動化:定期將專案進度、任務分配等資料匯出Excel,便於團隊溝通與追蹤。
  • 數據分析與共享:將資料庫查詢結果轉成Excel,方便進行進一步分析或與他人共享。
  • 批次資料導出:大量資料需批次匯出給客戶或合作單位,Excel格式最為通用。
  • 自動化流程整合:結合自動化工具(如Monday.com、ClickUp等),將系統資料自動匯出Excel,提升協作效率。

主流匯出方法比較與選擇建議

C#將DataTable匯出Excel有多種實現方式,以下比較常見方法,協助你根據需求選擇最適合的工具。

ClosedXML、Interop、EPPlus、IronXL 比較

方法 優點 缺點/限制 適用情境
ClosedXML 語法簡潔易懂、支援.xlsx、免安裝Excel、開源 不支援.xls、極大檔案效能有限 一般報表、批次匯出、格式自定義
Interop 微軟官方、支援所有Excel功能 需安裝Excel、僅支援Windows、效能較差 桌面應用、需高度自定義格式
EPPlus 開源、效能佳、支援.xlsx、格式控制彈性 商用需授權、部分新格式支援有限 企業應用、需客製格式
IronXL 支援多格式、效能佳、API現代化 商用需付費、套件較大 大型專案、需高效能

建議:若需免安裝Excel、快速開發、支援.xlsx,ClosedXML是最推薦的選擇。若有特殊格式需求或效能瓶頸,可評估EPPlus或IronXL。

準備工作

環境需求與相容性

  • .NET Framework 4.5以上.NET Core/.NET 5+
  • ClosedXML支援.xlsx格式(不支援舊版.xls)
  • 適用於Windows、Linux、macOS等多平台

ClosedXML安裝步驟

  1. 開啟Visual Studio,於專案上點選「管理NuGet套件」。
  2. 搜尋「ClosedXML」,點選安裝。
  3. 或於「套件管理員主控台」輸入以下指令安裝:

powershell
Install-Package ClosedXML

C# DataTable 匯出 Excel 步驟詳解

以下以ClosedXML為例,逐步說明如何將DataTable資料匯出為Excel檔案。

新增命名空間

在C#檔案頂部加入必要命名空間:

using System.Data;
using ClosedXML.Excel;

建立並填充DataTable

建立一個DataTable並加入測試資料:

DataTable dt = new DataTable();
dt.Columns.Add("姓名", typeof(string));
dt.Columns.Add("部門", typeof(string));
dt.Columns.Add("分數", typeof(int));

// 加入資料
dt.Rows.Add("王小明", "行銷部", 85);
dt.Rows.Add("李美麗", "研發部", 92);
dt.Rows.Add("陳大仁", "財務部", 78);

使用ClosedXML匯出Excel

將DataTable內容匯出至Excel檔案:

using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add(dt, "成績表");
    workbook.SaveAs("成績報表.xlsx");
}
  • Worksheets.Add(dt, "成績表"):將DataTable直接轉為工作表。
  • SaveAs("成績報表.xlsx"):儲存檔案於專案執行目錄。

自定義Excel格式(選用)

可進一步美化Excel,例如標題加粗、調整欄寬:

using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add(dt, "成績表");

    // 標題列加粗
    worksheet.Row(1).Style.Font.Bold = true;

    // 自動調整欄寬
    worksheet.Columns().AdjustToContents();

    // 設定分數欄位格式
    worksheet.Column(3).Style.NumberFormat.Format = "0";

    workbook.SaveAs("成績報表_格式化.xlsx");
}

完整範例程式碼與解析

完整程式碼

以下為將DataTable匯出Excel的完整範例,含格式自定義與註解:

using System;
using System.Data;
using ClosedXML.Excel;

class Program
{
    static void Main()
    {
        // 1. 建立DataTable並加入資料
        DataTable dt = new DataTable();
        dt.Columns.Add("姓名", typeof(string));
        dt.Columns.Add("部門", typeof(string));
        dt.Columns.Add("分數", typeof(int));
        dt.Rows.Add("王小明", "行銷部", 85);
        dt.Rows.Add("李美麗", "研發部", 92);
        dt.Rows.Add("陳大仁", "財務部", 78);

        // 2. 建立Excel檔案
        using (var workbook = new XLWorkbook())
        {
            var worksheet = workbook.Worksheets.Add(dt, "成績表");

            // 3. 格式自定義
            worksheet.Row(1).Style.Font.Bold = true;
            worksheet.Columns().AdjustToContents();
            worksheet.Column(3).Style.NumberFormat.Format = "0";

            // 4. 儲存檔案
            workbook.SaveAs("成績報表.xlsx");
        }

        Console.WriteLine("匯出完成!");
    }
}

重點解析

  • DataTable結構:欄位型別需正確對應,避免型別錯誤。
  • 檔案儲存路徑:預設儲存於專案執行目錄,可自行指定完整路徑。
  • 格式自定義:可針對標題、數字格式、欄寬等進行美化,提升報表可讀性。
  • 常見錯誤提醒
  • 檔案若已開啟,儲存時會出現「檔案被鎖定」錯誤。
  • 欄位型別不符,會導致匯出失敗。
  • 檔名請避免特殊字元。

常見問題與排查(FAQ)

常見錯誤訊息與解決方法

問題情境 錯誤訊息/現象 解決建議
檔案已開啟 檔案正由另一程序使用 關閉Excel檔案後再執行匯出
欄位型別不符 無法轉換型別/匯出失敗 確認DataTable欄位型別正確
權限不足 存取被拒 以管理員身分執行或更換儲存路徑
檔案名稱有特殊字元 儲存失敗 避免使用/、\、:、*等特殊字元

進階應用Q&A

Q1:如何將多個DataTable匯出到多個工作表?
A:可重複呼叫Worksheets.Add,每個DataTable指定不同工作表名稱。

using (var workbook = new XLWorkbook())
{
    workbook.Worksheets.Add(dt1, "部門A");
    workbook.Worksheets.Add(dt2, "部門B");
    workbook.SaveAs("多工作表報表.xlsx");
}

Q2:如何匯出到現有Excel檔案?
A:可先用XLWorkbook載入現有檔案,再新增工作表。

using (var workbook = new XLWorkbook("現有報表.xlsx"))
{
    workbook.Worksheets.Add(dt, "新資料");
    workbook.SaveAs("現有報表_更新.xlsx");
}

Q3:匯出大量資料時效能不佳怎麼辦?
A:建議分批處理、減少格式設定,或考慮使用EPPlus、IronXL等效能更佳的套件。

結語與延伸建議

C#結合ClosedXML,能輕鬆將DataTable資料匯出為Excel,無論是專案管理、數據分析還是自動化報表,皆能大幅提升效率。若需進一步整合自動化協作流程,可考慮搭配Monday.com等專案協作平台,將報表自動產出與任務追蹤無縫結合,讓團隊資訊流更順暢。建議根據實際需求選擇合適的匯出方法,並善用格式自定義與錯誤排查技巧,打造高品質的Excel報表。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

✨ 讓專案管理變簡單,團隊更強大!

在專案推進的每一步,效率就是競爭力。monday.com 整合進度追蹤、團隊協作與資源分配,讓你隨時掌握全局、快速解決問題。
全球18萬家專業團隊已經採用,你還在等什麼?