目錄
ToggleC# 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安裝步驟
- 開啟Visual Studio,於專案上點選「管理NuGet套件」。
- 搜尋「ClosedXML」,點選安裝。
- 或於「套件管理員主控台」輸入以下指令安裝:
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報表。