IRONSOFTWAREHOME
USING IRONXL

using IronXL 在 C# 中將資料集匯出到 Excel | 無需 Office

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

在C#中將DataSet或DataTable匯出到Excel,為您提供了一種可靠的方法,可將結構化的記憶體資料轉換為專業的電子表格文件,而不依賴於目標機器上已安裝的Microsoft Office。無論您是從SQL資料庫中提取記錄、以程式化方式構建DataSet,還是使用現有的DataGrid,IronXL通過乾淨的、以程式碼為主的API處理整個管道。 此指南涵蓋所有主要情景,從單表匯出到多工作表簿再到實時資料庫查詢結果,使用高層級的C#語句和.NET 10。

只需安裝IronXL一次,撰寫幾行程式碼,您的資料便可在XLSX文件中,而無需依賴單一Office。 以下部分涵蓋安裝、核心模式、高級格式化和資料庫整合,您可以直接複製並粘貼到自己的項目中。

如何安裝IronXL以匯出Excel?

在撰寫任何匯出程式碼之前,透過NuGet套件管理器將IronXL新增到您的專案中。 在專案根目錄中開啟終端並運行.NET CLI命令,或在Visual Studio的套件管理器控制台中使用Install-Package命令:

dotnet add package IronXL.Excel

或在Visual Studio套件管理器控制台中:

PM > Install-Package IronXL.Excel

安裝後,新增頂層using語句來匯入IronXL名稱空間:

using IronXL;
using System.Data;

IronXL的目標是.NET 8、.NET 9和.NET 10以及較舊版的.NET Framework(4.6.2+)。 在任何機器上都無需安裝Office——無論是伺服器、桌面還是雲端。 安裝包後,您可以完全用受管程式碼建立、讀取和寫入XLSX、XLS和CSV文件。

有關詳細的安裝選項,請參閱IronXL安裝指南NuGet套件頁面的版本歷史。

如何將單個DataTable匯出到Excel文件?

最常見的情況是將一個DataTable匯出到單個工作表。 IronXL的WorkSheet類自然地對應於Excel物件模型。 您建立一個工作簿,新增一個工作表,然後迭代DataTable的列和行。

以下範例建立一個記憶體中的員工DataTable並將其寫入EmployeeData.xlsx

using IronXL;
using System.Data;

// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));

dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");

// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows starting at row 1
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dt.Rows[row][col].ToString());
    }
}

workbook.SaveAs("EmployeeData.xlsx");

輸出

如何用IronXL將DataSet匯出到Excel VB .NET:完整指南:圖像1 - 將簡單的DataTable匯出到Excel的VB .NET輸出

SetCellValue接受int、double、string和bool——因此您可以獲得本機的Excel單元格型別,無需額外的型別轉換。 此迴圈模式適用於任何大小的表格,因為IronXL直接寫入記憶體,並在調用SaveAs時才刷新到磁碟,保持高效,即使是數千行。

想要更全面了解讀寫技術,IronXL C#教程涵蓋了這種匯出模式的所有文件操作範圍。

如何將DataSet匯出到多個Excel工作表?

當一個DataSet包含多個相關的表(例如產品和訂單)時,您可以將每個DataTable映射到同一工作簿中的自己工作表中。 這使得接收方可以在單個文件中查看所有相關資料,而無需打開多個文件。

下面的迴圈迭代ds.Tables並為每個表建立一個工作表:

using IronXL;
using System.Data;

// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");

DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);

DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);

// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

foreach (DataTable table in ds.Tables)
{
    WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);

    // Write headers
    for (int col = 0; col < table.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
    }

    // Write rows
    for (int row = 0; row < table.Rows.Count; row++)
    {
        for (int col = 0; col < table.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
        }
    }
}

workbook.SaveAs("CompanyReport.xlsx");

輸出

如何用IronXL將DataSet匯出到Excel VB.NET:完整指南:圖像2 - 生成的Excel文件,其中匯出的DataSet作為單獨的工作表

每個工作表以來源DataTable的名稱命名,使Excel中的導航變得簡易。 因為WorkBook.Create在記憶體中分配工作簿,您可以在迴圈中不重新打開文件就繼續新增工作表——IronXL在寫入磁碟前構建整個XLSX結構。

IronXL WorkBook文件列出了WorkBook物件上可用的每個方法,包括工作表重新排序、密碼保護和另存為格式。

如何為Excel匯出新增標題格式?

純資料匯出是功能性的,但新增粗體標題和列寬使輸出在商業背景中立即可用。 IronXL透過附加到任何Style物件暴露單元格和範圍樣式。

下面的程式碼片段將格式設為粗體字體應用於標題行,並在寫入資料後自動調整列。

using IronXL;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));

dt.Rows.Add("否rth", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East",  87000m, 93000m,  99000m,  108000m);
dt.Rows.Add("West",  145000m, 152000m, 161000m, 174000m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    sheet["A1:E1"].Style.Font.Bold = true;
    sheet["A1:E1"].Style.Font.Height = 12;
}

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
    }
}

workbook.SaveAs("SalesReport.xlsx");
C#

Style.Font.Bold屬性應用於整個標題範圍中的單條語句。 IronXL還支援背景顏色(Style.HorizontalAlignment)。 有關完整的樣式參考,請參閱IronXL單元格式指南

如何將資料庫查詢結果匯出到Excel?

連接到SQL資料庫並將結果直接匯出到Excel涵蓋了一個主要的現實用例——定期報告、資料快照和行政匯出。 該方法使用SqlDataAdapter填充DataSet,然後將生成的DataTable映射到IronXL工作表中。

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";

// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
    adapter.Fill(ds, "Customers");
}

DataTable dt = ds.Tables["Customers"]!;

// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");

// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;

// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object cellValue = dt.Rows[row][col];
        worksheet.SetCellValue(row + 1, col,
            cellValue == DBNull.Value ? "" : cellValue.ToString()!);
    }
}

workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");

資料庫匯出的關鍵點

空檢查(cellValue == DBNull.Value ? '' : cellValue.ToString()) prevents exceptions when the database returns NULL值——這是帶有可選列時的常見情況。 在標題行上加粗格式,使報告接收者能夠立即區分標題和資料。

有關將資料從Excel回讀到C#物件的其他模式,IronXL DataTable匯出教程展示了如何逆轉此工作流。

如何比較IronXL與其他Excel匯出方法?

選擇程式庫之前,了解主要選項如何在DataSet匯出情境中相對於彼此的表現是有幫助的。

.NET DataSet情境的Excel匯出程式庫比較
方法需要Office支援XLSX樣式API多表效能(大資料)
IronXL完整
Microsoft Office Interop完整
EPPlus部分
ClosedXML部分
CSV(手動)否ne非常高

Microsoft Office Interop僅在安裝了Office的Windows計算機上工作,這排除了伺服器部署和雲功能的可能。 IronXL、EPPlus和ClosedXML都支援伺服端生成——關鍵區別是樣式API的廣度和授權模式。 IronXL的授權包括商業使用,並覆蓋所有.NET目標框架的單一包。

有關第三方基準和比較,Microsoft文件關於Excel文件格式EPPlus專案頁面提供了您為專案做正確選擇的其他背景。

如何在沒有記憶體問題的情況下處理大型DataSets?

匯出包含成千上萬行的DataTable時,保持記憶體使用情況的可預測性至關重要。 下面的模式從IDataReader串流資料,而不是首先將整個結果集載入到DataTable中。這樣可避免同時保存讀者緩衝區和DataTable帶來的雙重記憶體成本。

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");

using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();

// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
    sheet.SetCellValue(0, col, reader.GetName(col));
}

// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
    for (int col = 0; col < reader.FieldCount; col++)
    {
        sheet.SetCellValue(excelRow, col,
            reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
    }
    excelRow++;
}

workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");

當結果集可能超過50,000行或者執行在記憶體有限的服務中時,建議使用此模式。IronXL效能文件介紹了有關大容量匯出的更多記憶體和吞吐量調整選項。

將非常大宗匯出的批量保存為CSV

對於超過500,000行的匯出,當記憶體非常緊張時,請考慮將輸出分散到多個工作簿或改為匯出為CSV格式:

using IronXL;

// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");

CSV失去了格式和多表支持,但對於下游ETL流程仍然有效,在這些流程中消費原始分隔資料。

如何將Excel文件保存為不同格式和位置?

IronXL支持保存到文件路徑、byte[],這對於ASP.NET應用返回Excel作為下載響應特別重要。

using IronXL;
using System.IO;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");

// Save to file path
workbook.SaveAs("Report.xlsx");

// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");

// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action

對於ASP.NET Core,從您的控制器動作返回File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx")以觸發瀏覽器下載。 IronXL ASP.NET Excel指南展示了完整的控制器整合模式。

對於其他.NET Excel程式庫,Open XML SDK是許多繼承者建立在其上的開源基礎。

支援的輸出格式

IronXL在不需任何額外依賴的情況下保存為以下格式:

  • XLSX——OpenXML格式,與Excel 2007及更高版本相容
  • XLS——遺留的二進制格式,與Excel 97-2003相容
  • CSV——逗號分隔的值,普遍支援
  • TSV——製表符分隔的值
  • JSON——結構化資料匯出

切換格式只需在ExcelFileFormat枚舉值的重載方法。

如何驗證匯出的Excel文件正確無誤?

匯出後,您可以用IronXL讀回文件,以驗證行數、點檢值或在測試專案中運行自動斷言:

using IronXL;

WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];

// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");

// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;

Console.WriteLine($"Header: {header}, First row: {firstEmployee}");

這一驗證模式在整合測試中特別有用,當確認匯出正確性必須在將文件發送到外部系統之前完成時。 IronXL讀取教程展示了在載入文件後可用的所有讀取操作範圍。

有關DataSet和DataTable模式在.NET中的進一步閱讀,Microsoft DataSet文件從深度上涵蓋了ADO.NET物件模型。

您接下來的步驟是什麼?

您現在在C#中擁有每個主要的DataSet到Excel匯出情境的有效模式——從單個DataTable到多表工作簿、資料庫驅動的匯出、格式化標題和大型資料流。 以下是如何根據您的目標採取下一步:

  • 免費試用IronXL:首先使用免費試用授權,在承諾生產之前,對自己的資料運行上述範例。
  • 閱讀完整的API參考IronXL物件參考涵蓋每個WorkBook、WorkSheet和單元範圍的方法。
  • 探索相關的匯出教程C# DataTable轉Excel指南介紹了逆向工作流——將Excel讀回DataTable物件。
  • 複習格式選項IronXL單元格式文件顯示數字格式、邊框、背景顏色和對齊選項。
  • 檢查授權:對於生產部署,請參閱IronXL授權頁面,在開發者、組織和免版稅選項中進行選擇。
  • 與其他Iron Software工具進行比較:如果您的專案還需要PDF生成或OCR功能,Iron Software產品套件讓您可以以較低的價格捆綁多個程式庫。

基於這裡介紹的模式,您可以完全用受管C#程式碼新增排程任務自動化、ASP.NET Core下載端點和多格式輸出管道——不需要Office,不需要COM,不需要除了NuGet包以外的執行時依賴。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預約您的免費即時演示
Booking Badge

全球數百萬工程師的信賴

Iron Software的客戶標誌
獲得無義務諮詢
填寫以下表格或電郵sales@ironsoftware.com
您的資料將始終保密。
全球數百萬工程師的信賴
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立