跳過到頁腳內容
使用 IRONXL

C# 將列表物件導出到 Excel

將物件集合匯出至Excel檔案是商務應用程式中的基本需求。 無論是生成報告、共享數據見解還是創建備份用的Excel工作表,開發人員都需要一種可靠的方法來將List<t>物件轉換為專業的電子表格。 IronXL 提供了一個解決方案,消除了在.NET 10、.NET Core或.NET Framework中創建Excel文件的傳統困難,並且無需在伺服器上安裝Microsoft Office。

為什麼將清單匯出至Excel文件具有挑戰性?

傳統方法將數據匯出至Excel通常涉及Microsoft Office Interop,這需要在伺服器上安裝MS Excel,並造成部署上的麻煩。 使用反射進行手動逐格填充既耗時又容易出錯。 IronXL的數據匯入功能 解決了這些問題,通過智能屬性映射將數據來源與Excel列標題匹配,無需依賴MS Office或複雜的反射代碼。

該程式庫自動進行類型轉換,支援嵌套物件,並在CSV檔案和XLSX檔案等不同格式之間維持數據完整性。 對於正在沒有Interop的C# Excel操作的開發者來說,IronXL是現代.NET專案進行可靠Excel生成和數據匯入/匯出功能的理想選擇。

IronXL如何簡化物件匯出?

IronXL消除了COM註冊、Office許可證和互操作組件的需求。 當您將List<t>匯出到Excel時,該程式庫會進行以下操作:

  • 將物件屬性直接映射至列標題
  • 將.NET類型(DateTime, decimal, bool)轉換為其正確的Excel表示
  • 允許對格值、範圍和格式進行細緻控制
  • 使用單一方法呼叫以XLSX, XLS, CSV和其他格式儲存輸出

這種方法意味著您可以在不需撰寫數百行樣板代碼的情況下獲得清晰的專業電子表格輸出。 您還可以隨時從Excel匯入數據,使數據回程工作流程變得簡單明瞭。

IronXL如何安裝?

使用IronXL需要最少的設置。通過NuGet套件管理器控制台安裝該程式庫:

Install-Package IronXL
Install-Package IronXL
SHELL

或者使用.NET CLI:

dotnet add package IronXL
dotnet add package IronXL
SHELL

安裝後,將using IronXL;指令添加到文件中。無需額外的Office依賴或運行時安裝。

如何將簡單的清單匯出至Excel?

以下示例展示了如何使用.NET 10中首選的頂級聲明語法將Employee物件清單匯出到XLSX文件:

using IronXL;
using System.Data;

// Define the Employee model
record Employee(int Id, string Name, string Department, decimal Salary, DateTime HireDate);

// Create sample employee data
List<Employee> employees =
[
    new(1, "Alice Johnson", "Engineering", 95000, new DateTime(2020, 3, 15)),
    new(2, "Bob Smith",    "Marketing",   75000, new DateTime(2021, 7, 1)),
    new(3, "Carol Williams","Engineering",105000, new DateTime(2019, 11, 20))
];

// Build a DataTable from the list
DataTable dataTable = new();
dataTable.Columns.Add("Id",         typeof(int));
dataTable.Columns.Add("Name",       typeof(string));
dataTable.Columns.Add("Department", typeof(string));
dataTable.Columns.Add("Salary",     typeof(decimal));
dataTable.Columns.Add("HireDate",   typeof(DateTime));

foreach (var emp in employees)
    dataTable.Rows.Add(emp.Id, emp.Name, emp.Department, emp.Salary, emp.HireDate);

// Create an IronXL workbook and worksheet
WorkBook workbook  = new();
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write headers
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

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

// Save as XLSX
workbook.SaveAs("EmployeeReport.xlsx");
Console.WriteLine("EmployeeReport.xlsx saved.");
using IronXL;
using System.Data;

// Define the Employee model
record Employee(int Id, string Name, string Department, decimal Salary, DateTime HireDate);

// Create sample employee data
List<Employee> employees =
[
    new(1, "Alice Johnson", "Engineering", 95000, new DateTime(2020, 3, 15)),
    new(2, "Bob Smith",    "Marketing",   75000, new DateTime(2021, 7, 1)),
    new(3, "Carol Williams","Engineering",105000, new DateTime(2019, 11, 20))
];

// Build a DataTable from the list
DataTable dataTable = new();
dataTable.Columns.Add("Id",         typeof(int));
dataTable.Columns.Add("Name",       typeof(string));
dataTable.Columns.Add("Department", typeof(string));
dataTable.Columns.Add("Salary",     typeof(decimal));
dataTable.Columns.Add("HireDate",   typeof(DateTime));

foreach (var emp in employees)
    dataTable.Rows.Add(emp.Id, emp.Name, emp.Department, emp.Salary, emp.HireDate);

// Create an IronXL workbook and worksheet
WorkBook workbook  = new();
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write headers
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

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

// Save as XLSX
workbook.SaveAs("EmployeeReport.xlsx");
Console.WriteLine("EmployeeReport.xlsx saved.");
$vbLabelText   $csharpLabel

此示例將DataTable,然後將標題和行寫入IronXL工作表中。 IronXL自動處理像int, DateTime這樣的數據類型,確保生成的電子表格中有整潔的格式。 Excel儲存功能生成一個可在任何電子表格應用中打開的XLSX文件。

C#將物件清單匯出至Excel使用IronXL:圖片1 - 與IronXL一起將C#物件清單匯出至Excel的3個相關圖像中的圖像1

如何匯出複雜的商務物件?

現實世界的.NET應用通常涉及到更複雜的資料結構。 以下示例生成了一份具有計算屬性的產品庫存報告:

using IronXL;
using System.Data;

// Define the Product model with a computed property
record Product(
    string SKU,
    string ProductName,
    string Category,
    decimal Price,
    int StockLevel,
    bool IsActive,
    DateTime LastRestocked)
{
    public decimal CalculatedValue => Price * StockLevel;
}

// Build the product list
List<Product> products =
[
    new("TECH-001", "Wireless Mouse",      "Electronics",     29.99m, 150, true,  DateTime.Now.AddDays(-5)),
    new("TECH-002", "Mechanical Keyboard", "Electronics",     89.99m,  75, true,  DateTime.Now.AddDays(-12)),
    new("OFF-001",  "Desk Organizer",      "Office Supplies", 15.99m,   0, false, DateTime.Now.AddMonths(-1))
];

// Populate a DataTable
DataTable dt = new();
dt.Columns.Add("SKU",             typeof(string));
dt.Columns.Add("ProductName",     typeof(string));
dt.Columns.Add("Category",        typeof(string));
dt.Columns.Add("Price",           typeof(decimal));
dt.Columns.Add("StockLevel",      typeof(int));
dt.Columns.Add("IsActive",        typeof(bool));
dt.Columns.Add("LastRestocked",   typeof(DateTime));
dt.Columns.Add("CalculatedValue", typeof(decimal));

foreach (var p in products)
    dt.Rows.Add(p.SKU, p.ProductName, p.Category, p.Price,
                p.StockLevel, p.IsActive, p.LastRestocked, p.CalculatedValue);

// Create the workbook
WorkBook  wb = WorkBook.Create();
WorkSheet ws = wb.CreateWorkSheet("Inventory");

// Write column headers
string[] headers = ["SKU","ProductName","Category","Price",
                    "StockLevel","IsActive","LastRestocked","CalculatedValue"];
for (int col = 0; col < headers.Length; col++)
    ws.SetCellValue(0, col, headers[col]);

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

// Auto-size columns for readability
for (int col = 0; col < headers.Length; col++)
    ws.AutoSizeColumn(col);

wb.SaveAs("ProductInventory.xlsx");
Console.WriteLine("ProductInventory.xlsx saved.");
using IronXL;
using System.Data;

// Define the Product model with a computed property
record Product(
    string SKU,
    string ProductName,
    string Category,
    decimal Price,
    int StockLevel,
    bool IsActive,
    DateTime LastRestocked)
{
    public decimal CalculatedValue => Price * StockLevel;
}

// Build the product list
List<Product> products =
[
    new("TECH-001", "Wireless Mouse",      "Electronics",     29.99m, 150, true,  DateTime.Now.AddDays(-5)),
    new("TECH-002", "Mechanical Keyboard", "Electronics",     89.99m,  75, true,  DateTime.Now.AddDays(-12)),
    new("OFF-001",  "Desk Organizer",      "Office Supplies", 15.99m,   0, false, DateTime.Now.AddMonths(-1))
];

// Populate a DataTable
DataTable dt = new();
dt.Columns.Add("SKU",             typeof(string));
dt.Columns.Add("ProductName",     typeof(string));
dt.Columns.Add("Category",        typeof(string));
dt.Columns.Add("Price",           typeof(decimal));
dt.Columns.Add("StockLevel",      typeof(int));
dt.Columns.Add("IsActive",        typeof(bool));
dt.Columns.Add("LastRestocked",   typeof(DateTime));
dt.Columns.Add("CalculatedValue", typeof(decimal));

foreach (var p in products)
    dt.Rows.Add(p.SKU, p.ProductName, p.Category, p.Price,
                p.StockLevel, p.IsActive, p.LastRestocked, p.CalculatedValue);

// Create the workbook
WorkBook  wb = WorkBook.Create();
WorkSheet ws = wb.CreateWorkSheet("Inventory");

// Write column headers
string[] headers = ["SKU","ProductName","Category","Price",
                    "StockLevel","IsActive","LastRestocked","CalculatedValue"];
for (int col = 0; col < headers.Length; col++)
    ws.SetCellValue(0, col, headers[col]);

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

// Auto-size columns for readability
for (int col = 0; col < headers.Length; col++)
    ws.AutoSizeColumn(col);

wb.SaveAs("ProductInventory.xlsx");
Console.WriteLine("ProductInventory.xlsx saved.");
$vbLabelText   $csharpLabel

此代碼生成了一個包含SKU、價格、庫存水平和補貨日期等詳細資訊的CalculatedValue。 IronXL處理小數、布林值和日期這類的數據類型,確保專業的電子表格輸出。 結果ProductInventory.xlsx提供了一個專業製成的數據驅動型庫存匯出,適合用於商業報告或分析。 如果現有代碼已經使用DataTable物件,您也可以直接將DataTable直接匯出至Excel

C#將物件清單匯出至Excel使用IronXL:圖片2 - 示範複雜商務物件輸出的示例

如何控制列寬和列高?

在寫入數據之後,您可以以程式化的方式控制電子表格的視覺佈局。 IronXL的AutoSizeColumn方法會調整每一列以適應其內容。 或者,您可以設置明確的列寬或增刪行列以在儲存之前調整工作表結構。

對於行高,IronXL提供行級屬性,使您可以設置固定的像素高度 —— 這在工作表將被打印或以PDF形式共享時特別有用。 一致的列寬和行高設計在Excel文件被不同屏幕分辨率打開或以不同比例打印時改善可讀性,這對分發給外部相關方的報告特別重要。

如何添加專業格式?

格式化將基本的匯出轉變為潤色的報告。 IronXL的樣式API公開了可用於任何儲存格或範圍的字體、顏色、邊框和數字格式設置:

using IronXL;

WorkBook  wb = WorkBook.Load("ProductInventory.xlsx");
WorkSheet ws = wb.DefaultWorkSheet;

// Bold header row with a blue background and white text
Range headerRange = ws["A1:H1"];
headerRange.Style.Font.Bold            = true;
headerRange.Style.BackgroundColor      = "#4472C4";
headerRange.Style.Font.Color           = "#FFFFFF";

// Format the Price column as currency
Range priceColumn = ws["D2:D100"];
priceColumn.Style.NumberFormat = "$#,##0.00";

// Highlight low-stock rows in red
for (int row = 2; row <= 4; row++)
{
    var stockCell = ws[$"E{row}"];
    if (stockCell.IntValue < 10)
        stockCell.Style.BackgroundColor = "#FF6B6B";
}

wb.SaveAs("FormattedInventory.xlsx");
Console.WriteLine("FormattedInventory.xlsx saved.");
using IronXL;

WorkBook  wb = WorkBook.Load("ProductInventory.xlsx");
WorkSheet ws = wb.DefaultWorkSheet;

// Bold header row with a blue background and white text
Range headerRange = ws["A1:H1"];
headerRange.Style.Font.Bold            = true;
headerRange.Style.BackgroundColor      = "#4472C4";
headerRange.Style.Font.Color           = "#FFFFFF";

// Format the Price column as currency
Range priceColumn = ws["D2:D100"];
priceColumn.Style.NumberFormat = "$#,##0.00";

// Highlight low-stock rows in red
for (int row = 2; row <= 4; row++)
{
    var stockCell = ws[$"E{row}"];
    if (stockCell.IntValue < 10)
        stockCell.Style.BackgroundColor = "#FF6B6B";
}

wb.SaveAs("FormattedInventory.xlsx");
Console.WriteLine("FormattedInventory.xlsx saved.");
$vbLabelText   $csharpLabel

這些樣式選項將原始數據匯出轉變為準備給高管的報告。 具有背景色的粗體標題創造視覺層次。 數字格式確保貨幣值顯示正確。 條件格式化突出顯示關鍵的商務指標,如低庫存水平,使匯出的Excel電子表格迅速變得可操作,用於庫存管理。 您可以了解更多關於高級儲存格格式化邊框樣式來進一步增強匯出的信息。

C#將物件清單匯出至Excel使用IronXL:圖片3 - 格式化的工作表

如何程式化應用條件格式?

IronXL支援條件格式化規則,這些規則與Excel內建功能相似。 您可以根據格值閾值、文本匹配或日期範圍定義規則。 一旦將規則應用於範圍,IronXL會寫入對應的XLSX格式中繼數據,以便在Excel或Google Sheets中開啟時行為如預期。

當匯出的文件將由非技術相關人查看時,這特別有用,他們預期的報告顏色化顯示而不是簡單的表格式數據。

如何在匯出前排序和篩選數據?

您可以在寫入List<t>至Excel之前對它進行排序和篩選。 使用標準LINQ,可以按部門和薪水對員工排序,或過濾產品僅顯示有效項目。 一旦篩選清單準備就緒,使用上述相同的逐列方式將其寫入工作表。

IronXL還支援在工作簿中直接對已填入的範圍排序儲存格-- 允許填入後的排序而無需返回原始集合。

如何匯出清單至其他文件格式?

IronXL不僅限於XLSX。 相同的WorkBook物件可以用一個方法更改儲存至多種格式:

  • XLSX -- 默認現代Excel格式:workbook.SaveAs("output.xlsx")
  • XLS -- 老舊Office版本的遺留Excel格式
  • CSV -- 為數據管道相容性而設的逗號分隔值
  • TSV -- 製表符分隔值

匯出至CSV格式時,每個工作表成為一個獨立的CSV文件。這使IronXL不僅對最終用戶報告有用,還可以生成ETL管道、數據科學工具或第三方API所用的中間數據文件。對於匯出DataGridView數據--Windows Forms應用中的常見模式--IronXL無需額外適配器即可順利整合。

如何有效處理大型數據集?

當匯出數千行時,性能成為一個擔憂。 請注意以下準則:

  • 首先填入DataTable,然後在迴圈中寫入行,而不要從反射中反复調用個別的儲存格設置器方法。
  • 只在所有數據寫入後再調用AutoSizeColumn因為這是一個讀取掃描操作。
  • 避免緊密迴圈中重新讀取和重新保存工作簿--在記憶體中構建完整的數據集,然後只調用SaveAs一次。
  • 對於超過100,000行的數據集,考慮分拆跨多個工作表的匯出以維持Excel的行數限制並保持文件尺寸可管理。

IronXL還提供一個ASP.NET Core的匯出工作流程,XLSX文件直接寫入MemoryStream並作為文件下載回應返回,完全繞過磁碟I/O。

如何在ASP.NET Core中將清單匯出至Excel?

在構建網絡API或Razor Pages應用程序時,通常希望Excel文件作為HTTP回應返回,而不是保存到磁碟。 下面的模式從控制器操作中返回FileContentResult

控制器注入一個服務構建Content-Disposition: attachment標題的位元組數據。 此方法適用於任何.NET 10的最小API或MVC控制器。

完整的教學指南請參見ASP.NET Core Excel 匯出教學,如果您正在構建Blazor WebAssembly或Blazor Server應用程序,則參見Blazor 匯出教學

如何開始使用IronXL?

IronXL將Excel生成任務轉化為可維護的代碼。 其API消除了Microsoft Office的依賴關係,同時提供符合企業需求的專業結果。 該程式庫的功能集涵蓋從基本清單匯出到帶有樣式和格式的複雜數據轉換。

您也可以使用IronXL讀取和編輯現有工作簿將Excel數據匯出至DataTable以便進一步處理,或創建樞紐分析表以獲得摘要報告。 將上述格式選項與這些功能結合起來,以產生在發佈前不需手動調整的電子表格。

IronXL可以在NuGet上的使用,適用於任何目標.NET 10, .NET 8或.NET Framework 4.6.2+的專案。 Open XML SDK支撐了IronXL讀寫的XLSX文件格式,讓您有信心生成的文件符合ECMA-376標準,並在任何支持OOXML的應用中正確打開。

現在開始使用 IronXL。
green arrow pointer

準備好開始匯出C#清單至Excel了嗎? 立即下載IronXL,體驗如何迅速在.NET應用中將清單物件轉換為Excel。 對於生產部署,探索可以隨著您的需求擴展的靈活授權選項。 訪問文件以獲得更多教程和範例。

常見問題解答

如何將C#清單匯出到Excel檔案?

您可以使用 IronXL 的 ImportData 方法將 C# 清單匯出到 Excel 文件,這簡化了流程,無需 Office Interop。

我為什麼要使用 IronXL 將資料匯出到 Excel?

IronXL 提供了一個簡化的解決方案,可將資料匯出至 Excel,消除了傳統的複雜性,並可輕鬆與 .NET、.NET Core 或 .NET Framework 整合。

我需要安裝 Microsoft Office 才能使用 IronXL 嗎?

不,IronXL 不需要安裝 Microsoft Office。它可以獨立運行,讓您以程式設計方式建立和操作 Excel 檔案。

IronXL在匯出到Excel時能否處理清單中的複雜物件?

是的,IronXL 既可以處理普通列表,也可以處理複雜對象,從而可以靈活地將各種類型的資料匯出到 Excel。

IronXL 是否兼容 .NET Core?

是的,IronXL 與 .NET Core、.NET 和 .NET Framework 都相容,使其能夠靈活應用於不同的開發環境。

使用 IronXL 的 ImportData 方法有什麼優勢?

IronXL 中的 ImportData 方法簡化了將資料從 C# 清單傳輸到 Excel 的過程,從而降低了程式碼的複雜性並提高了生產力。

我可以用IronXL建立專業電子表格嗎?

當然,IronXL允許開發人員輕鬆地將List物件轉換為專業的試算表,適合用於報告、資料分享或備份。

是否有使用 IronXL 的程式碼範例?

是的,IronXL 文件和教學課程提供了簡單的程式碼範例,用於將通用清單和複雜物件匯出到 Excel。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me