跳過到頁腳內容
使用 IRONXL

如何使用IronXL在C#中生成Excel文件

傳統上,使用 C# 以程式設計方式產生 Excel 工作表檔案需要安裝 Microsoft Office 或進行複雜的 COM 互通性。 IronXL徹底改變了這一現狀,提供了一個簡單的 API,無需任何 Office 依賴即可建立 Excel 檔案。 本教學將引導您使用IronXL在 C# 中建立 Excel 文件,從基本的電子表格建立到進階格式設定和資料庫整合。 無論您是建立報表、匯出資料(XLS 或 XLSX 檔案)還是自動產生電子表格,您都將學習在.NET應用程式中使用 Excel的基本技巧。

如何使用IronXL在 C# 中產生 Excel 檔案:圖 1 - IronXL

為什麼要在不使用 Microsoft Office 的情況下產生 Excel 檔案?

開發不依賴 Office 的 Excel 產生功能,可以解決關鍵的部署難題。 由於許可成本和資源佔用,伺服器環境中很少安裝微軟Office。 每個 Office 安裝都需要大量的磁碟空間和內存,這使得它不適用於雲端部署或容器化應用程式。

IronXL透過獨立運行消除了這些限制。 您的 C# Excel 檔案產生程式無需修改即可在 Windows、Linux、macOS、Docker 容器或 Azure 應用程式服務上執行。 這種跨平台相容性意味著您只需編寫一次程式碼,即可部署到任何地方,無論是面向.NET Framework、 .NET Core還是.NET 10 應用程式。

如何使用IronXL在 C# 中產生 Excel 檔案:圖 2 - 跨平台

無需 COM 互通開銷,效能顯著提升。 傳統辦公室自動化會為每個操作建立單獨的進程實例,消耗記憶體和 CPU 資源。 IronXL在應用程式進程空間內的記憶體中處理所有內容,從而在以程式設計方式產生 Excel 檔案時實現更快的執行速度和更低的資源消耗。

由於IronXL以單一NuGet套件的形式提供,因此部署變得非常簡單。 無需登錄項目、無需 COM 註冊、無需維護 Office 服務包。 您的持續整合管道運作順暢,Docker 容器保持輕量級。 這種簡化的方法使IronXL成為一種受歡迎的選擇,在各種開發者論壇上,專業人士分享了他們在 Excel 自動化方面的經驗,對此進行了討論。

有些開發人員仍在探索微軟的 Open XML Productivity Tool,以便直接處理 Office Open XML 檔案結構。 不過,這種方法需要更多的人工操作和對 XML 模式及 Open XML SDK 安裝的詳細了解。 IronXL消除了這些複雜性,讓您能夠更快地以程式設計方式使用 Excel。

如何使用IronXL在 C# 中產生 Excel 檔案:圖 3 - 功能

如何在 C# 專案中安裝IronXL ?

透過 Visual Studio 中的NuGet套件管理器安裝IronXL只需幾分鐘。 在解決方案資源管理器中以滑鼠右鍵按一下您的項目,然後選擇"管理NuGet套件"。搜尋"IronXl.Excel",然後按一下"安裝"。 該軟體包會自動包含在 C# 中產生 Excel 檔案所需的所有相依性。

若要透過套件管理器控制台或.NET CLI 進行安裝,請使用下列任一命令:

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

如何使用IronXL在 C# 中產生 Excel 檔案:圖 4 - 安裝

使用以下簡單測試驗證安裝是否已就緒:

using IronXL;
// Create an in-memory workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
using IronXL;
// Create an in-memory workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
$vbLabelText   $csharpLabel

如果運行沒有錯誤, IronXL即可使用。 該程式庫支援所有現代.NET版本,確保與您現有專案的兼容性。 有關詳細的安裝指南和故障排除,請參閱官方NuGet安裝文件

輸出

如何使用IronXL在 C# 中產生 Excel 檔案:圖 5 - 控制台輸出

如何建立你的第一個Excel檔案?

使用IronXL建立 Excel 檔案首先要從 WorkBook 類別開始,它是您進行所有 Excel 操作的入口。 該程式庫同時支援現代 XLSX 和舊式 XLS 格式,讓您在 C# 中建立 Excel 檔案時能夠靈活滿足不同的需求。

using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add header row
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add header row
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
$vbLabelText   $csharpLabel

這段程式碼示範了Excel檔案產生的幾個關鍵概念。 WorkBook.Create() 方法在記憶體中初始化一個新的 Excel 檔案。 您可以使用 ExcelFileFormat 枚舉指定格式 -- 選擇 XLSX 相容於現代 Excel,選擇 XLS 可支援舊版 Excel。 Metadata 屬性可讓您嵌入文件訊息,該資訊將出現在 Excel 的文件屬性中,遵循Microsoft 的文檔屬性標準

CreateWorkSheet() 方法會新增一個具有指定名稱的新工作表。 Excel 熟悉的儲存格表示法(A1、B1 等)讓設定值變得直覺。 IronXLIronXL自動處理資料類型轉換,無需明確轉換即可識別日期、數字和文字。 SaveAs() 方法將整個 Excel 檔案寫入磁碟。 如需了解更多工作表操作,請參閱如何撰寫 Excel 文件指南

輸出

如何使用IronXL在 C# 中產生 Excel 檔案:圖 6 - 基本 Excel 輸出

如何將資料寫入Excel單元格?

IronXL提供了多種填滿 Excel 儲存格的方法,從單一儲存格指派到批次範圍操作。 了解這些方法有助於您在向 Excel 文件寫入資料時,根據您的資料場景選擇最有效的方法。

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells at once
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based row, 0-based column)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based header population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("EmployeeData.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells at once
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based row, 0-based column)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based header population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("EmployeeData.xlsx");
$vbLabelText   $csharpLabel

該程式碼展示了 IronXL 的靈活單元尋址方式。 對於 Excel 使用者來說,字串表示法("A1")感覺很自然,而數值索引則為循環和動態生成提供了程式控制。 範圍賦值("B1:B3")可以有效地將多個單元格設定為相同的值,非常適合初始化列或套用預設值。

IronXL能智慧地處理不同的資料類型。小數能維持財務資料的精確度,DateTime 物件能正確格式化為 Excel 日期,布林值顯示為 TRUE/FALSE。 這種自動轉換方式無需手動編寫格式化程式碼,同時還能確保資料完整性。 對於大型資料集,請查閱匯入資料指南以了解更多模式。

輸出

如何使用IronXL在 C# 中產生 Excel 檔案:圖 7 - Excel 輸出

如何對Excel檔案套用專業格式?

專業Excel檔案需要的不只原始資料。 IronXL 的樣式 API 透過格式、顏色和視覺層次結構,將普通的電子表格轉換為精美的商業文件。 您可以透過設定單元格格式來控制電子表格的各個視覺方面。

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B width
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability (banded rows)
for (int row = 2; row <= 10; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
workbook.SaveAs("FormattedReport.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B width
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability (banded rows)
for (int row = 2; row <= 10; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
workbook.SaveAs("FormattedReport.xlsx");
$vbLabelText   $csharpLabel

這種格式化程式碼可以創造符合商業標準的專業外觀。 醒目的標題搭配背景色,可以建立視覺層次感。 SetBackgroundColor() 方法接受十六進位顏色代碼,從而可以精確控製配色方案。 字體屬性包括大小、顏色、粗體、斜體和下劃線選項——所有這些對於創建符合公司品牌指南的 Excel 文件至關重要。

調整列寬可以防止文字被截斷。 AutoSizeColumn() 自動適應內容,而 GetColumn().Width 提供精確控制。 數字格式設定使用 Excel 的格式代碼-例如,"$#,##0.00"表示以千位分隔符號和兩位小數顯示貨幣。 日期格式遵循類似的模式,使用微軟數字格式代碼參考中記錄的標準 Excel 日期格式字串。

邊框定義了資料邊界,提高了可讀性。 BorderType 枚舉提供了各種樣式:細線、中線、粗線、點線和虛線。 交替的行顏色(通常稱為"帶狀行")有助於讀者追蹤大型資料集中的資訊。 要了解有關合併單元格和其他佈局功能的更多信息,請參閱合併單元格指南

輸出

如何使用IronXL在 C# 中產生 Excel 檔案:圖 8 - 格式化的 Excel 輸出

如何以程式設計方式使用Excel公式?

Excel公式透過自動計算使電子表格變得生動有趣。 IronXL支援公式建立和計算,從而實現自動更新的動態電子表格。

using IronXL;
var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data and add row total formulas
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas before saving
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
using IronXL;
var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data and add row total formulas
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas before saving
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
$vbLabelText   $csharpLabel

這個預算範例說明了公式的實際應用。 Formula 屬性接受以等號開頭的標準 Excel 公式語法。 IronXL支援常用函數:SUM、AVERAGE、COUNT、MAX、MIN 等。 公式中的儲存格引用與 Excel 中的完全相同,包括相對引用和絕對引用。

EvaluateAll() 方法處理所有公式,更新整個工作簿中的計算值。 這樣可以確保在 Excel 中開啟檔案時,公式能夠顯示結果。 如果不進行評估,Excel 將顯示公式文本,直到使用者觸發重新計算。 有關讀取公式結果的更多信息,請參閱讀取 Excel 文件文檔

輸出

如何使用IronXL在 C# 中產生 Excel 檔案:圖 9 - 使用公式輸出 Excel 檔案

如何將資料庫資料匯出到Excel?

實際應用中經常會將資料庫資料匯出到 Excel 中進行報表和分析。 IronXL透過內建的 DataTable 支持,使此過程變得簡單,從 C# 應用程式匯出 Excel時無需手動進行欄位對應。

using System.Data;
using IronXL;

// Simulate database retrieval (replace with actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}

// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
DataTable salesData = GetSalesData();

// Title row
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;

// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");

// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}

// Total header
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency and date columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";

// Summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";

for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); }
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
using System.Data;
using IronXL;

// Simulate database retrieval (replace with actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}

// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
DataTable salesData = GetSalesData();

// Title row
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;

// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");

// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}

// Total header
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency and date columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";

// Summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";

for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); }
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
$vbLabelText   $csharpLabel

本範例示範了完整的資料庫到 Excel 工作流程。 DataTable 模擬資料庫檢索 -- 在生產環境中,請使用 Entity Framework、Dapper 或.NET將其替換為實際的資料庫查詢。 手動映射方法可以完全控制格式和佈局,這是 微軟資料匯出最佳實踐所建議的。

程式碼產生一份專業的報告,包含標題、格式化的表頭和資料行。 公式列動態計算行總計。 摘要部分使用 Excel 公式來統計訂單數量和總計收入,確保如果資料發生變化,這些數值也會隨之更新。 若要處理資料集和更大的資料結構,請參閱Excel 到資料集轉換指南

輸出

如何使用IronXL在 C# 中產生 Excel 檔案:圖 10 - 資料庫匯出到 Excel 輸出

需要將Excel報表投入生產環境嗎? 取得許可證,即可解鎖 IronXL 在生產部署方面的全部潛力。

如何處理多個工作表?

複雜的Excel檔案通常需要多個工作表來組織相關資料。 IronXL透過建立、存取和組織工作表的直覺方法,簡化了多工作表管理。 只需幾行程式碼即可開啟和管理工作簿工作表

using IronXL;
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");

// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}

// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    if (status == "REORDER")
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
}

// Summary sheet with cross-sheet formulas
summarySheet["A1"].Value = "Company Overview";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";

// Apply consistent formatting across all sheets
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
}
companyReport.SaveAs("CompanyReport.xlsx");
using IronXL;
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");

// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}

// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    if (status == "REORDER")
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
}

// Summary sheet with cross-sheet formulas
summarySheet["A1"].Value = "Company Overview";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";

// Apply consistent formatting across all sheets
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
}
companyReport.SaveAs("CompanyReport.xlsx");
$vbLabelText   $csharpLabel

此範例產生完整的多工作表報表。 每個工作表都有其特定用途:銷售資料、庫存追蹤和匯總視圖。 匯總表使用跨表公式整合關鍵指標。 請注意工作表引用語法—"Sales!B4:B7"指的是銷售工作表中的儲存格 B4 到 B7。

庫存表展示了條件邏輯,將庫存不足的商品標記為紅色,以便立即關注。 foreach 循環在所有工作表中套用一致的格式,從而在整個工作簿中保持專業的外觀。 工作表名稱在 Excel 中顯示為選項卡,方便使用者在不同的資料視圖之間輕鬆切換。

C#中產生Excel檔案的最佳實務是什麼?

在 C# 中高效產生 Excel 檔案需要對記憶體使用、錯誤處理和部署採取周全的方法。 這些做法可確保您的應用程式在以程式設計方式建立 Excel 電子表格時能夠有效擴展並保持可靠性。

處理大型檔案時,記憶體管理至關重要。 分批處理數據,而不是一次載入整個數據集。 以下模式可確保高容量導出操作的記憶體使用量可預測:

using IronXL;
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
int rowsPerBatch = 1000;
int currentRow = 2;
sheet["A1"].Value = "ID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Value";
// Process records in manageable batches
foreach (var batch in GetDataInBatches(rowsPerBatch))
{
    foreach (var record in batch)
    {
        sheet[$"A{currentRow}"].Value = record.Id;
        sheet[$"B{currentRow}"].Value = record.Name;
        sheet[$"C{currentRow}"].Value = record.Value;
        currentRow++;
    }
}
workbook.SaveAs("LargeDataset.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
int rowsPerBatch = 1000;
int currentRow = 2;
sheet["A1"].Value = "ID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Value";
// Process records in manageable batches
foreach (var batch in GetDataInBatches(rowsPerBatch))
{
    foreach (var record in batch)
    {
        sheet[$"A{currentRow}"].Value = record.Id;
        sheet[$"B{currentRow}"].Value = record.Name;
        sheet[$"C{currentRow}"].Value = record.Value;
        currentRow++;
    }
}
workbook.SaveAs("LargeDataset.xlsx");
$vbLabelText   $csharpLabel

對於 Web 應用程序,在記憶體中產生 Excel 檔案並直接串流傳輸給用戶,而不是將臨時檔案寫入磁碟。 始終將生成邏輯封裝在錯誤處理程序中,以防止崩潰並提供有意義的回饋:

// ASP.NET Core controller action with error handling
IActionResult DownloadExcel()
{
    try
    {
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Report");
        sheet["A1"].Value = "Report Data";
        // Populate report data here...
        var stream = new MemoryStream();
        workbook.SaveAs(stream);
        stream.Position = 0;
        return File(stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "report.xlsx");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Excel generation failed: {ex.Message}");
        return StatusCode(500, "Failed to generate Excel file.");
    }
}
// ASP.NET Core controller action with error handling
IActionResult DownloadExcel()
{
    try
    {
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Report");
        sheet["A1"].Value = "Report Data";
        // Populate report data here...
        var stream = new MemoryStream();
        workbook.SaveAs(stream);
        stream.Position = 0;
        return File(stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "report.xlsx");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Excel generation failed: {ex.Message}");
        return StatusCode(500, "Failed to generate Excel file.");
    }
}
$vbLabelText   $csharpLabel

下表總結了關鍵最佳實踐及其適用場景:

IronXL在 C# 中產生 Excel 的最佳實踐
設想 推薦方法 益處
Large datasets (>10,000 rows) 使用分塊寫入進行批次處理 減少記憶體佔用
網頁應用程式下載 使用 MemoryStream 而不是臨時文件 無磁碟 I/O,回應速度更快
生產部署 請提供有效的IronXL許可證密鑰 產生的文件上沒有浮水印
貨幣和日期 使用 FormatString 屬性 Excel 中正確的區域設定顯示
動態報表 在 SaveAs() 之前呼叫 EvaluateAll() 公式顯示計算值

IronXL可在受限環境中運行,無需提升權限,因此適用於共用主機和容器化部署。 將IronXL許可證檔案包含在部署套件中,並確保應用程式具有對任何所需臨時檔案操作的寫入權限。 有關更多部署指導,請參閱IronXL功能概述和完整的API 文件

接下來你能去哪裡?

IronXL將 C# 中 Excel 檔案產生從複雜的挑戰轉變為簡單的編碼。 您已經學會了建立工作簿、填充單元格、應用程式格式、使用公式、匯出資料庫資料以及管理多個工作表——所有這些都無需依賴 Microsoft Office。 這些技術在面向.NET 10 的 Windows、Linux 和雲端平台上都能穩定運作。

若要深入了解,請瀏覽IronXL 的操作指南,了解如何讀取和修改現有的 Excel 文件,或造訪試用許可證頁面,開始在生產環境中使用。 查看符合您專案需求和規模的授權選項

如何使用IronXL在 C# 中產生 Excel 檔案:圖 11 - 授權

常見問題解答

我如何能使用 C# 生成 Excel 文件?

您可以透過 IronXL 在 C# 中建立 Excel 檔案,該工具提供簡易的 API,讓您無需安裝 Microsoft Office 或進行複雜的 COM 互通,即可建立 Excel 檔案。

在C#中操作Excel文件是否需要Microsoft Office?

不,無需安裝 Microsoft Office。IronXL 讓您能在 C# 中建立及處理 Excel 檔案,且完全不依賴 Office 套件。

與傳統方法相比,使用 IronXL 有什麼優勢?

IronXL 透過免除對 Microsoft Office 及複雜 COM 互通的需求,簡化了 Excel 檔案的生成流程,並提供直觀的 API 來建立與處理 Excel 檔案。

我可以使用 IronXL 將資料庫與 Excel 檔案整合嗎?

是的,IronXL 支援資料庫整合等進階操作,讓您能高效地將資料匯出至 Excel 檔案。

IronXL 可以產生哪些檔案格式?

IronXL 讓您能夠建立 XLS 和 XLSX 兩種檔案格式,使其能靈活滿足各種 Excel 檔案生成需求。

IronXL 是否支援 Excel 檔案的高階格式設定?

是的,IronXL 支援進階格式設定功能,讓您能夠自訂 Excel 檔案的外觀與結構。

是否可以使用 IronXL 自動生成試算表?

是的,IronXL 提供工具與技術來自動化生成試算表,從而簡化報表製作和資料匯出等流程。

如何在 .NET 應用程式中使用 Excel 建立報表?

IronXL 提供了一種簡易的報表建立方式,可直接在 .NET 應用程式中產生 Excel 檔案,為資料呈現提供強大的解決方案。

在 C# 中操作 Excel 時,哪些技巧是不可或缺的?

使用 IronXL 在 C# 中操作 Excel 的核心技術包括:基礎試算表建立、進階格式設定以及資料庫整合。

哪裡可以找到關於在 C# 中使用 IronXL 的文件?

您可在 Iron Software 網站上找到關於在 C# 中使用 IronXL 的完整文件,其中包含各種使用情境的教學指南與範例。

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

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我