使用 IRONXL 如何使用 IronXL 在 C# 中產生 Excel 文件 Jordi Bardia 發表日期:12月 18, 2025 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在雙子座打開 請向 Gemini 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 傳統上,使用 C# 或 Visual Basic 以程式設計方式產生 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 8/9 應用程式。 如何使用 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? 透過解決方案資源管理器中的 NuGet 套件管理器安裝 IronXL 只需幾分鐘。 在 Visual Studio 中,以滑鼠右鍵按一下您的項目,然後選擇"管理 NuGet 套件"。搜尋"IronXL.Excel",然後按一下"安裝"。 該軟體包會自動包含在 C# 中產生 Excel 檔案所需的所有相依性。 或者,使用軟體包管理器控制台: Install-Package IronXL.Excel Install-Package IronXL.Excel SHELL 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 4 - 安裝 對於使用現代 C# 專案的 .NET CLI 使用者: dotnet add package IronXL.Excel dotnet add package IronXL.Excel SHELL 透過以下簡單測試驗證安裝是否已完成,該測試將以程式設計方式建立 Excel 檔案: using IronXL; // Create a new Excel workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); using IronXL; // Create a new Excel workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這段程式碼會建立一個記憶體中的工作簿物件。 如果運行沒有錯誤,IronXL 即可使用。 該程式庫支援所有現代 .NET 版本,確保與您現有專案的兼容性。 有關詳細的安裝指導和故障排除,請參閱官方文件。 準備好開始? 立即下載 IronXL,幾分鐘內即可開始產生 Excel 檔案。 輸出 如何使用 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 some basic data 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 some basic data 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"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這段程式碼示範了Excel檔案產生的幾個關鍵概念。 WorkBook.Create()方法在記憶體中初始化一個新的 Excel 檔案。 您可以使用ExcelFileFormat列舉指定格式 - 選擇 XLSX 相容於現代 Excel,選擇 XLS 支援舊版 Excel。 Metadata屬性可讓您嵌入文件訊息,這些資訊將顯示在 Excel 的文件屬性中,並遵循Microsoft 的文檔屬性標準。 CreateWorkSheet()方法會新增一個具有指定名稱的新工作表。 Excel 熟悉的儲存格表示法(A1、B1 等)讓設定值變得直覺。 IronXL 會自動處理資料類型轉換,無需明確轉換即可識別日期、數字和文字。 SaveAs()方法會將整個 Excel 檔案寫入磁碟。 如需了解更多工作表操作,請參閱工作表管理教學。 輸出 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 6 - 基本 Excel 輸出 如何將資料寫入Excel單元格? IronXL 提供了多種填滿 Excel 儲存格的方法,從單一儲存格指派到批次範圍操作。 了解這些方法有助於您根據數據情況選擇最有效的方法。 WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet 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 worksheet["B1:B3"].Value = "Active"; // Using numeric indices (0-based) worksheet.SetCellValue(0, 2, "Department"); // C1 worksheet.SetCellValue(1, 2, "Sales"); // C2 worksheet.SetCellValue(2, 2, "Marketing"); // C3 // Array-based 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("FirstExcelFile.xlsx"); WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet 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 worksheet["B1:B3"].Value = "Active"; // Using numeric indices (0-based) worksheet.SetCellValue(0, 2, "Department"); // C1 worksheet.SetCellValue(1, 2, "Sales"); // C2 worksheet.SetCellValue(2, 2, "Marketing"); // C3 // Array-based 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("FirstExcelFile.xlsx"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 該程式碼展示了 IronXL 的靈活單元尋址方式。 對於 Excel 使用者來說,字串表示法("A1")感覺很自然,而數值索引則為循環和動態生成提供了程式控制。 範圍賦值("B1:B3")可以有效地將多個單元格設定為相同的值,非常適合初始化列或套用預設值。 IronXL 能智慧處理不同的資料類型。小數能維持財務資料的精確度,日期時間物件能正確格式化為 Excel 日期,布林值顯示為 TRUE/FALSE。 這種自動轉換方式無需手動編寫格式化程式碼,同時還能確保資料完整性。 輸出 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 7 - Excel 輸出 對於較大的資料集,請考慮以下模式: // Populate from a data source var employees = GetEmployeeData(); // Your data source for (int row = 0; row < employees.Count; row++) { worksheet[$"A{row + 2}"].Value = employees[row].Id; worksheet[$"B{row + 2}"].Value = employees[row].Name; worksheet[$"C{row + 2}"].Value = employees[row].Department; worksheet[$"D{row + 2}"].Value = employees[row].Salary; } // Populate from a data source var employees = GetEmployeeData(); // Your data source for (int row = 0; row < employees.Count; row++) { worksheet[$"A{row + 2}"].Value = employees[row].Id; worksheet[$"B{row + 2}"].Value = employees[row].Name; worksheet[$"C{row + 2}"].Value = employees[row].Department; worksheet[$"D{row + 2}"].Value = employees[row].Salary; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這種方法會遍歷你的資料集合,將每個屬性對應到其對應的列。 字串插值( $"A{row + 2}" )動態產生儲存格位址,從第 2 行開始以保留標題。 如何應用專業格式? 專業Excel檔案需要的不只原始資料。 使用 C# 產生 Excel 檔案時,IronXL 的樣式 API可以透過格式、顏色和視覺層次結構將普通的電子表格轉換為精美的商業文件。 using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet 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 to 20 characters // 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; // To set border color, use: dataRange.Style.TopBorder.Color = "#000000"; dataRange.Style.BottomBorder.Color = "#000000"; dataRange.Style.LeftBorder.Color = "#000000"; dataRange.Style.RightBorder.Color = "#000000"; // Text alignment worksheet["A1:G1"].Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center; // Alternating row colors for readability for (int row = 2; row <= 3; row++) { if (row % 2 == 0) { worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2"); } } using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet 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 to 20 characters // 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; // To set border color, use: dataRange.Style.TopBorder.Color = "#000000"; dataRange.Style.BottomBorder.Color = "#000000"; dataRange.Style.LeftBorder.Color = "#000000"; dataRange.Style.RightBorder.Color = "#000000"; // Text alignment worksheet["A1:G1"].Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center; // Alternating row colors for readability for (int row = 2; row <= 3; row++) { if (row % 2 == 0) { worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2"); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這種格式化程式碼可以創造符合企業標準的專業外觀。 醒目的標題搭配背景色,可以建立視覺層次感。 SetBackgroundColor()方法接受十六進位顏色程式碼,讓您可以精確控製配色方案。 字體屬性包括大小、顏色、粗體、斜體和底線選項,這些對於建立符合公司品牌指南的 Excel 檔案都至關重要。 調整列寬可以防止文字被截斷。 AutoSizeColumn()可自動調整內容大小,而SetColumnWidth()可提供精確控制。 數字格式設定使用Excel的格式代碼。 例如,"$#,##0.00"表示以千位分隔符號和兩位小數表示貨幣。 日期格式遵循類似的模式,使用微軟 Excel 規範中記錄的標準 Excel 日期格式字串。 邊框定義了資料邊界,提高了可讀性。 BorderType 枚舉提供了多種樣式:細邊框、中等邊框、粗邊框、點狀邊框和虛線邊框。 對齊選項使標題居中,數字右對齊,遵循電子表格約定。 交替的行顏色(通常稱為"帶狀行")有助於讀者追蹤大型資料集中的資訊。 在我們的儲存格樣式指南中了解更多關於進階格式設定的信息,以建立格式化的 Excel 資料。 輸出 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 8 - 格式化的 Excel 輸出 如何以程式設計方式使用Excel公式? Excel公式透過自動計算使電子表格變得生動有趣。 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 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]; // Row total formula 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"; budget["C9"].Formula = "=C3/C7*100"; budget["D9"].Formula = "=D3/D7*100"; // Average calculation budget["A10"].Value = "Average Spending"; budget["B10"].Formula = "=AVERAGE(B2:B6)"; // Evaluate all formulas workbook.EvaluateAll(); workbook.SaveAs("Budget.xlsx"); 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 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]; // Row total formula 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"; budget["C9"].Formula = "=C3/C7*100"; budget["D9"].Formula = "=D3/D7*100"; // Average calculation budget["A10"].Value = "Average Spending"; budget["B10"].Formula = "=AVERAGE(B2:B6)"; // Evaluate all formulas workbook.EvaluateAll(); workbook.SaveAs("Budget.xlsx"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這個預算範例說明了公式的實際應用。 Formula 屬性接受以等號開頭的標準 Excel 公式語法。 IronXL 支援常用函數:SUM、AVERAGE、COUNT、MAX、MIN 等。 公式中的儲存格引用與 Excel 中的完全相同,包括相對引用和絕對引用。 行總計公式( =SUM(B{i + 2}:D{i + 2}) )計算每個類別的季度總計。 字串插值會動態地為每一行產生正確的儲存格參考。 月總計是將整列數值相加,而百分比計算則是將特定儲存格數值除以總計數值。 EvaluateAll()方法處理所有公式,更新整個工作簿中的計算值。 這樣可以確保公式在 Excel 中開啟時顯示結果。 如果不進行評估,Excel 將顯示公式,直到使用者觸發重新計算。 輸出 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 9 - 使用公式輸出 Excel 文件 如何將資料庫中的資料匯出到Excel? 實際應用中經常需要將資料庫資料匯出到 Excel 中進行報表和分析。 IronXL 透過內建的DataTable支援簡化了此流程,從 C# 應用程式產生 Excel 檔案時無需手動進行欄位對應。 using System; using System.Data; using System.Data.SqlClient; // Simulate database retrieval (replace with your 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)); // Sample data (normally from database) 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"); // Get data from database DataTable salesData = GetSalesData(); // Method 1: Manual mapping with formatting 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); } // Format headers 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]); } // Add total column with formula reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}"; } // Add total header and format reportSheet["G3"].Value = "Total"; reportSheet["G3"].Style.Font.Bold = true; reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2"); // Format currency 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"; // Format date column reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy"; // Add 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"; // Auto-fit columns for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); } // Evaluate formulas and save reportWorkbook.EvaluateAll(); reportWorkbook.SaveAs("DatabaseExport.xlsx"); using System; using System.Data; using System.Data.SqlClient; // Simulate database retrieval (replace with your 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)); // Sample data (normally from database) 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"); // Get data from database DataTable salesData = GetSalesData(); // Method 1: Manual mapping with formatting 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); } // Format headers 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]); } // Add total column with formula reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}"; } // Add total header and format reportSheet["G3"].Value = "Total"; reportSheet["G3"].Style.Font.Bold = true; reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2"); // Format currency 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"; // Format date column reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy"; // Add 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"; // Auto-fit columns for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); } // Evaluate formulas and save reportWorkbook.EvaluateAll(); reportWorkbook.SaveAs("DatabaseExport.xlsx"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這個全面的範例示範了使用 C# 產生 Excel 檔案的完整資料庫到 Excel 工作流程。 DataTable模擬資料庫擷取 - 在生產環境中,請使用 Entity Framework、Dapper 或 ADO.NET 將其替換為實際的資料庫查詢。 手動映射方法可以完全控制格式和佈局,這是 微軟資料匯出最佳實踐所建議的。 程式碼產生一份專業的報告,包含標題、格式化的標題和資料行。 公式列動態計算行總計。 摘要部分利用 Excel 公式來統計訂單數量和計算收入總和,確保在資料變更時這些數值能夠及時更新。 貨幣和日期格式遵循商業文件標準,而自動調整列寬可確保所有內容正確顯示。 如需處理更大的資料集,請參閱我們的效能最佳化指南。 輸出 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 10 - 資料庫匯出到 Excel 輸出 需要簡化您的 Excel 報表製作流程嗎? 取得許可證,即可解鎖 IronXL 在生產部署方面的全部潛力。 如何處理多個工作表? 複雜的Excel檔案通常需要多個工作表來組織相關資料。 IronXL 透過建立、存取和組織工作表的直覺方法,簡化了多工作表管理。 // Create a multi-sheet workbook WorkBook companyReport = WorkBook.Create(); // Create department sheets WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales"); WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory"); WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics"); // 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"; inventorySheet["A3"].Value = "Product"; inventorySheet["B3"].Value = "Stock Level"; inventorySheet["C3"].Value = "Reorder Point"; inventorySheet["D3"].Value = "Status"; // Add inventory data with conditional 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]; // Status based on stock level string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK"; inventorySheet[$"D{i + 4}"].Value = status; // Color code status if (status == "REORDER") { inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000"; } } // Create summary sheet referencing other sheets WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary"); summarySheet["A1"].Value = "Company Overview"; summarySheet["A3"].Value = "Metric"; summarySheet["B3"].Value = "Value"; 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\")"; // Format all sheets consistently foreach (WorkSheet sheet in companyReport.WorkSheets) { // Format headers sheet["A1"].Style.Font.Bold = true; sheet["A1"].Style.Font.Height = 14; var headerRow = sheet["A3:D3"]; headerRow.Style.Font.Bold = true; headerRow.Style.SetBackgroundColor("#E7E6E6"); } // Save multi-sheet workbook companyReport.SaveAs("CompanyReport.xlsx"); // Create a multi-sheet workbook WorkBook companyReport = WorkBook.Create(); // Create department sheets WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales"); WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory"); WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics"); // 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"; inventorySheet["A3"].Value = "Product"; inventorySheet["B3"].Value = "Stock Level"; inventorySheet["C3"].Value = "Reorder Point"; inventorySheet["D3"].Value = "Status"; // Add inventory data with conditional 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]; // Status based on stock level string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK"; inventorySheet[$"D{i + 4}"].Value = status; // Color code status if (status == "REORDER") { inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000"; } } // Create summary sheet referencing other sheets WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary"); summarySheet["A1"].Value = "Company Overview"; summarySheet["A3"].Value = "Metric"; summarySheet["B3"].Value = "Value"; 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\")"; // Format all sheets consistently foreach (WorkSheet sheet in companyReport.WorkSheets) { // Format headers sheet["A1"].Style.Font.Bold = true; sheet["A1"].Style.Font.Height = 14; var headerRow = sheet["A3:D3"]; headerRow.Style.Font.Bold = true; headerRow.Style.SetBackgroundColor("#E7E6E6"); } // Save multi-sheet workbook companyReport.SaveAs("CompanyReport.xlsx"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此範例產生完整的多工作表報表。 每個工作表都有其特定用途:銷售數據、庫存追蹤和人力資源指標。 匯總表使用跨表公式整合關鍵指標。 請注意公式中的工作表引用語法,"Sales!B4:B7"指的是銷售工作表中的儲存格 B4 到 B7。 庫存表展示了條件邏輯,將庫存不足的商品標記為紅色,以便立即關注。 foreach循環在所有工作表中套用一致的格式,使整個工作簿保持專業的外觀。 工作表名稱在 Excel 中顯示為選項卡,方便使用者在不同的資料視圖之間輕鬆導覽。 Excel 產生最佳實務是什麼? 在 C# 中高效產生 Excel 檔案需要對記憶體使用、錯誤處理和部署採取周全的方法。 這些做法可確保您的應用程式在以程式設計方式建立 Excel 電子表格時能夠有效擴展並保持可靠性。 處理大型檔案時,記憶體管理至關重要。 不要將整個資料集載入到記憶體中,而是分塊處理資料: // Process large datasets efficiently public void ExportLargeDataset(string filename) { WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Data"); int rowsPerBatch = 1000; int currentRow = 1; // Process in 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(filename); } // Process large datasets efficiently public void ExportLargeDataset(string filename) { WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Data"); int rowsPerBatch = 1000; int currentRow = 1; // Process in 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(filename); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 錯誤處理可防止應用程式崩潰,並在生成 Excel 檔案時提供有意義的回饋: try { WorkBook workbook = WorkBook.Create(); // Excel generation code workbook.SaveAs("output.xlsx"); } catch (Exception ex) { // Log the error Console.WriteLine($"Excel generation failed: {ex.Message}"); // Implement appropriate recovery or notification } try { WorkBook workbook = WorkBook.Create(); // Excel generation code workbook.SaveAs("output.xlsx"); } catch (Exception ex) { // Log the error Console.WriteLine($"Excel generation failed: {ex.Message}"); // Implement appropriate recovery or notification } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 對於 Web 應用程序,在記憶體中產生 Excel 檔案並將其傳輸給使用者: // ASP.NET Core example public IActionResult DownloadExcel() { WorkBook workbook = GenerateReport(); var stream = new MemoryStream(); workbook.SaveAs(stream); stream.Position = 0; return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx"); } // ASP.NET Core example public IActionResult DownloadExcel() { WorkBook workbook = GenerateReport(); var stream = new MemoryStream(); workbook.SaveAs(stream); stream.Position = 0; return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx"); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 部署方面的考慮因素可確保生產營運順利進行。 IronXL 可在受限環境中運行,無需提升權限,因此適用於共用主機和容器化部署。 請在部署包中包含 IronXL 許可證文件,並確保您的應用程式在需要時具有臨時文件操作的寫入權限。 如需更多部署指導,請參閱部署文件。 結論 IronXL 將 C# 中 Excel 檔案產生從複雜的挑戰轉變為簡單的編碼。 你已經學會了建立工作簿、填充單元格、應用程式格式、使用公式和匯出資料庫資料——所有這些都不需要依賴 Microsoft Office。 這些以程式設計方式產生 Excel 檔案的技術在 Windows、Linux 和雲端平台上都能穩定運作。 準備好在您的 C# 應用程式中實現 Excel 生成功能了嗎? 立即開始免費試用,或瀏覽全面的API 文件以了解進階功能。 對於生產環境部署,請查看符合您專案要求的授權選項。 如何使用 IronXL 在 C# 中產生 Excel 檔案:圖 11 - 許可 Jordi Bardia 立即與工程團隊聊天 軟體工程師 Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。 相關文章 發表日期 12月 19, 2025 如何使用 C# Interop 與 IronXL 在 Excel 中建立資料透視表 在無需 Office 依賴的情況下在 C# 中構建 Excel 樞紐分析表。IronXL 對無需 Excel Interop 的樞紐型報告創建提供了強大的數據操作功能。 閱讀更多 發表日期 12月 18, 2025 使用 IronXL 將 C# DataGridView 匯出到 Excel,並帶有列標題 學習如何在 C# 教程中使用 IronXL library 將 DataGridView 資料匯出為 Excel 同時保留列標題。分步教學。 閱讀更多 發表日期 12月 18, 2025 如何在 C# 中使用 IronXL 創建 Excel 生成報告 使用 IronXL 在 C# 中創建 Excel 報告生成。學習構建擁有格式化公式和數據庫集成的專業報告。 閱讀更多 C# 中讀取 Excel 檔案的 StreamReader 替代方案 - IronXL使用 IronXL 將 C# 儲存為 CSV ...
發表日期 12月 19, 2025 如何使用 C# Interop 與 IronXL 在 Excel 中建立資料透視表 在無需 Office 依賴的情況下在 C# 中構建 Excel 樞紐分析表。IronXL 對無需 Excel Interop 的樞紐型報告創建提供了強大的數據操作功能。 閱讀更多
發表日期 12月 18, 2025 使用 IronXL 將 C# DataGridView 匯出到 Excel,並帶有列標題 學習如何在 C# 教程中使用 IronXL library 將 DataGridView 資料匯出為 Excel 同時保留列標題。分步教學。 閱讀更多
發表日期 12月 18, 2025 如何在 C# 中使用 IronXL 創建 Excel 生成報告 使用 IronXL 在 C# 中創建 Excel 報告生成。學習構建擁有格式化公式和數據庫集成的專業報告。 閱讀更多