跳過到頁腳內容
使用 IRONXL

如何在 C# 中使用 IronXL 創建 Excel 生成報告

使用 IronXL 在 C# 中建立 Excel 報表

在現代商業和 .NET 應用程式中,使用 C# 建立 Excel 報表是一項基本要求。 無論您是產生財務報表、銷售分析還是庫存儀表板,自動化建立 Excel 文件和 Excel 電子表格的過程都可以節省數小時的人工時間,同時減少錯誤。

IronXL為開發人員提供了一個強大且直覺的解決方案,可以使用 C# 建立 Excel 報表,而無需 Microsoft Office、MS Excel 或傳統的互通依賴項。 與 OLE 自動化或依賴 Excel 應用程式的方法不同,IronXL 允許在需要時僅用一行程式碼直接產生 Excel 工作簿和 Excel 資料。 在本指南中,我們將教您如何使用 IronXL 建立 Excel 報表,並提供易於理解的範例程式碼,您可以輕鬆地將其應用到自己的專案中!

IronXL是什麼?為什麼要使用它來產生Excel檔案?

IronXL 是一個 .NET Excel 庫,它使開發人員能夠直接從 C# 或 Visual Basic 原始碼建立、讀取 Excel 電子表格和操作 Excel 檔案。 與依賴完整 Excel 應用程式或透過 Open XML SDK 進行逆向工程的 Microsoft Office Interop 方法不同,IronXL 可在 Windows、Linux、macOS 和雲端環境中運行,無需安裝 Excel 或依賴第三方軟體。 這使其成為伺服器端 Excel 報表、自動化工作流程以及基於 .NET Core 或 .NET Framework 建立的 Web 應用程式的理想選擇。

對於正在從手動 Excel 流程、舊程式庫或需要瀏覽各種 XML 命名空間的 Open XML 生產力工具工作流程過渡的團隊而言,IronXL 提供了一個直覺的 API。 它既支援傳統的 XLS 文件,也支援現代的 XLSX 文件,後者本質上是包含 XML 文件和各種資料夾的 ZIP 文件。 無論您是想產生新的 Excel 工作簿、操作多個工作表,還是從外部程式碼載入 Excel 數據,IronXL 都能大幅簡化該過程,而無需了解底層格式。

使用 IronXL 建立 Excel 檔案入門指南

設定 IronXL 產生 Excel 報表只需幾分鐘。 在 Visual Studio 中透過 NuGet 套件管理器安裝庫:

Install-Package IronXL.Excel
Install-Package IronXL.Excel
SHELL

立即下載 IronXL ,開始自動產生 Excel 報表。

安裝完成後,建立您的第一個 Excel 報表只需幾行程式碼:

using IronXL;
// Create a new Excel workbook for reports
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet for the report
WorkSheet reportSheet = workBook.CreateWorkSheet("Monthly Report");
// Add a title
reportSheet["A1"].Value = "Sales Report - January 2024";
reportSheet["A1"].Style.Font.Bold = true;
// Save the Excel report
workBook.SaveAs("MonthlyReport.xlsx");
using IronXL;
// Create a new Excel workbook for reports
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet for the report
WorkSheet reportSheet = workBook.CreateWorkSheet("Monthly Report");
// Add a title
reportSheet["A1"].Value = "Sales Report - January 2024";
reportSheet["A1"].Style.Font.Bold = true;
// Save the Excel report
workBook.SaveAs("MonthlyReport.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這段程式碼會建立一個帶有格式化標題的新 Excel 報表檔案。 熟悉的儲存格引用語法( reportSheet["A1"] )使開發人員能夠輕鬆地指定資料應該出現的位置,就像手動使用 Excel 一樣。

輸出

如何使用 IronXL 在 C# 中建立 Excel 報表:圖 1 - Excel 輸出範例

從多個資料來源載入數據

在實際應用中,Excel報表很少使用靜態資料。 IronXL 擅長整合來自各種格式、API、新的資料表來源,甚至是幾個不同的 XML 檔案的 Excel 資料。 這使其非常適合在伺服器端或 Web 應用程式中產生動態 C# Excel 報表。

資料庫集成

對於資料庫驅動的 Excel 報表,IronXL 可以與ADO.NET DataTables無縫協作:

using System.Data;
using System.Data.SqlClient;
// Fetch data from database
string connectionString = "Server=localhost;Database=Sales;Integrated Security=true;";
DataTable salesData = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(
        "SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn);
    adapter.Fill(salesData);
}
// Create Excel report from DataTable
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Revenue";
// Populate data
int row = 2;
foreach (DataRow dataRow in salesData.Rows)
{
    sheet[$"A{row}"].Value = dataRow["ProductName"];
    sheet[$"B{row}"].Value = dataRow["Quantity"];
    sheet[$"C{row}"].Value = dataRow["Revenue"];
    row++;
}
using System.Data;
using System.Data.SqlClient;
// Fetch data from database
string connectionString = "Server=localhost;Database=Sales;Integrated Security=true;";
DataTable salesData = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(
        "SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn);
    adapter.Fill(salesData);
}
// Create Excel report from DataTable
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Revenue";
// Populate data
int row = 2;
foreach (DataRow dataRow in salesData.Rows)
{
    sheet[$"A{row}"].Value = dataRow["ProductName"];
    sheet[$"B{row}"].Value = dataRow["Quantity"];
    sheet[$"C{row}"].Value = dataRow["Revenue"];
    row++;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這種方法可以直接將銷售資料從 SQL Server 載入到 Excel 報表中。 透過 DataTable 集成,您可以直接使用現有的資料存取程式碼而無需修改。 對於更複雜的場景,請查看如何從 SQL 資料庫載入 Excel

處理收款事宜

對於記憶體中的資料、來自 API 回應的 Excel 資料或新的 DataTable,集合可以輕鬆填入 Excel 工作表,而無需 Microsoft Excel 或第三方相依性:

var salesRecords = new List<SalesRecord>
{
    new SalesRecord { Product = "Widget A", Units = 150, Price = 29.99m },
    new SalesRecord { Product = "Widget B", Units = 82, Price = 49.99m }
};
// Convert collection to Excel
for (int i = 0; i < salesRecords.Count; i++)
{
    sheet[$"A{i+2}"].Value = salesRecords[i].Product;
    sheet[$"B{i+2}"].Value = salesRecords[i].Units;
    sheet[$"C{i+2}"].Value = salesRecords[i].Price;
}
var salesRecords = new List<SalesRecord>
{
    new SalesRecord { Product = "Widget A", Units = 150, Price = 29.99m },
    new SalesRecord { Product = "Widget B", Units = 82, Price = 49.99m }
};
// Convert collection to Excel
for (int i = 0; i < salesRecords.Count; i++)
{
    sheet[$"A{i+2}"].Value = salesRecords[i].Product;
    sheet[$"B{i+2}"].Value = salesRecords[i].Units;
    sheet[$"C{i+2}"].Value = salesRecords[i].Price;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此方法允許直接在 .NET 應用程式中使用 C# 建立 Excel 報表,使得產生多個工作表或 XLSX 檔案的過程比手動 OLE 自動化或逆向工程 XML 檔案要簡單得多。

輸出

如何使用 IronXL 在 C# 中建立 Excel 報表:圖 2 - 資料輸出範例工作表

格式化專業Excel報表

單憑原始資料無法撰寫出一份專業的報告。 IronXL 提供全面的儲存格格式設定選項,可建立精美、可用於商務的 Excel 檔案。 以下程式碼展示了使用 IronXL 實現此功能有多麼簡單:

using IronXL;
using IronXL.Styles;

class Program
{
    static void Main(string[] args)
    {
        // Create a new workbook
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        // Add a new worksheet
        var sheet = workbook.CreateWorkSheet("MySheet");
        // Add header values
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Quantity";
        sheet["C1"].Value = "Price";
        // Add sample data rows
        sheet["A2"].Value = "Laptop";
        sheet["B2"].Value = 5;
        sheet["C2"].Value = 1299.99;
        sheet["A3"].Value = "Headphones";
        sheet["B3"].Value = 15;
        sheet["C3"].Value = 199.50;
        sheet["A4"].Value = "Keyboard";
        sheet["B4"].Value = 10;
        sheet["C4"].Value = 89.99;
        sheet["A5"].Value = "Monitor";
        sheet["B5"].Value = 7;
        sheet["C5"].Value = 249.00;
        // Header formatting
        var headerRange = sheet["A1:C1"];
        headerRange.Style.Font.Bold = true;
        headerRange.Style.SetBackgroundColor("#4472C4");
        headerRange.Style.Font.Color = "#FFFFFF";
        headerRange.Style.BottomBorder.Type = BorderType.Thick;
        // Number formatting for currency
        sheet["C:C"].FormatString = "$#,##0.00";
        // Alternating row colors for readability
        for (int row = 2; row <= 10; row++)
        {
            if (row % 2 == 0)
            {
                sheet[$"A{row}:C{row}"].Style.SetBackgroundColor("#F2F2F2");
            }
        }
        // Column width adjustment
        sheet.Columns[0].Width = 15 * 256; // Width in 1/256th of character width
        sheet.Columns[2].Width = 12 * 256;
        // Add borders around data
        var dataRange = sheet["A1:C10"];
        dataRange.Style.TopBorder.Type = BorderType.Thin;
        dataRange.Style.RightBorder.Type = BorderType.Thin;
        dataRange.Style.BottomBorder.Type = BorderType.Thin;
        dataRange.Style.LeftBorder.Type = BorderType.Thin;
        // Save the workbook to a file
        workbook.SaveAs("MyWorkbook.xlsx");
    }
}
using IronXL;
using IronXL.Styles;

class Program
{
    static void Main(string[] args)
    {
        // Create a new workbook
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        // Add a new worksheet
        var sheet = workbook.CreateWorkSheet("MySheet");
        // Add header values
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Quantity";
        sheet["C1"].Value = "Price";
        // Add sample data rows
        sheet["A2"].Value = "Laptop";
        sheet["B2"].Value = 5;
        sheet["C2"].Value = 1299.99;
        sheet["A3"].Value = "Headphones";
        sheet["B3"].Value = 15;
        sheet["C3"].Value = 199.50;
        sheet["A4"].Value = "Keyboard";
        sheet["B4"].Value = 10;
        sheet["C4"].Value = 89.99;
        sheet["A5"].Value = "Monitor";
        sheet["B5"].Value = 7;
        sheet["C5"].Value = 249.00;
        // Header formatting
        var headerRange = sheet["A1:C1"];
        headerRange.Style.Font.Bold = true;
        headerRange.Style.SetBackgroundColor("#4472C4");
        headerRange.Style.Font.Color = "#FFFFFF";
        headerRange.Style.BottomBorder.Type = BorderType.Thick;
        // Number formatting for currency
        sheet["C:C"].FormatString = "$#,##0.00";
        // Alternating row colors for readability
        for (int row = 2; row <= 10; row++)
        {
            if (row % 2 == 0)
            {
                sheet[$"A{row}:C{row}"].Style.SetBackgroundColor("#F2F2F2");
            }
        }
        // Column width adjustment
        sheet.Columns[0].Width = 15 * 256; // Width in 1/256th of character width
        sheet.Columns[2].Width = 12 * 256;
        // Add borders around data
        var dataRange = sheet["A1:C10"];
        dataRange.Style.TopBorder.Type = BorderType.Thin;
        dataRange.Style.RightBorder.Type = BorderType.Thin;
        dataRange.Style.BottomBorder.Type = BorderType.Thin;
        dataRange.Style.LeftBorder.Type = BorderType.Thin;
        // Save the workbook to a file
        workbook.SaveAs("MyWorkbook.xlsx");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這些格式化選項可以將基本資料轉換為專業報告。 樣式 API 涵蓋了從字體和顏色邊框和對齊方式的所有內容,從而可以完全控制 Excel 報表的外觀。 對於更進階的格式設定需求,可以探索條件格式,以自動反白顯示重要資料。

如何使用 IronXL 在 C# 中建立 Excel 報表:圖 3 - 格式化的 Excel 輸出

使用公式進行動態Excel報表計算

Excel 的強大之處在於其公式,而 IronXL 完全支援Excel 公式的建立

// Add formula for row totals
sheet["D1"].Value = "Total";
sheet["D2"].Formula = "=B2*C2";
// Copy formula down the column
for (int row = 3; row <= 10; row++)
{
    sheet[$"D{row}"].Formula = $"=B{row}*C{row}";
}
// Add summary formulas
sheet["A12"].Value = "Summary";
sheet["B12"].Formula = "=SUM(B2:B10)";
sheet["C12"].Formula = "=AVERAGE(C2:C10)";
sheet["D12"].Formula = "=SUM(D2:D10)";
// Add formula for row totals
sheet["D1"].Value = "Total";
sheet["D2"].Formula = "=B2*C2";
// Copy formula down the column
for (int row = 3; row <= 10; row++)
{
    sheet[$"D{row}"].Formula = $"=B{row}*C{row}";
}
// Add summary formulas
sheet["A12"].Value = "Summary";
sheet["B12"].Formula = "=SUM(B2:B10)";
sheet["C12"].Formula = "=AVERAGE(C2:C10)";
sheet["D12"].Formula = "=SUM(D2:D10)";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

公式支援包括所有標準 Excel 函數,如SUMAVERAGEIFVLOOKUP等。 IronXL 可自動處理公式依賴關係和計算順序,讓產生包含複雜計算的 Excel 報表變得簡單。 了解更多關於IronXL 中的數學函數的資訊。

如何使用 IronXL 在 C# 中建立 Excel 報表:圖 4 - 帶有公式的範例輸出

基於範本的報告

對於定期生成的 Excel 報表或標準化工作簿,IronXL 支援基於模板的生成,允許開發人員從模板建立 Excel 文件,而無需處理 Open XML SDK、rels 文件或各種資料夾:

// Load existing template
Workbook templateBook = Workbook.Load("ReportTemplate.xlsx");
Worksheet templateSheet = templateBook.DefaultWorksheet;
// Find and replace template markers
foreach (var cell in templateSheet["A1:Z100"])
{
    if (cell.Text.Contains("{{CompanyName}}"))
        cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp");
    if (cell.Text.Contains("{{ReportDate}}"))
        cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"));
}
// Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx");
// Load existing template
Workbook templateBook = Workbook.Load("ReportTemplate.xlsx");
Worksheet templateSheet = templateBook.DefaultWorksheet;
// Find and replace template markers
foreach (var cell in templateSheet["A1:Z100"])
{
    if (cell.Text.Contains("{{CompanyName}}"))
        cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp");
    if (cell.Text.Contains("{{ReportDate}}"))
        cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"));
}
// Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這種方法在更新動態內容的同時保持格式一致,非常適合用於每月報告或標準化文件。

如何使用 IronXL 在 C# 中建立 Excel 報表:圖 5 - 報表範本與使用該範本建立的 Excel 檔案對比

最佳實踐和故障排除

在進行Excel報表產生時,請記住以下幾點:

  • 處理大型檔案時的記憶體使用情況:分塊處理數據,而不是載入整個資料集(微軟針對大型 Excel 檔案的建議
  • 日期格式問題:使用DateTime.ToOADate()處理與 Excel 相容的日期( Excel 日期系統詳解
  • 檔案鎖定錯誤:請始終使用using語句或新的MemoryStream方法正確釋放 Excel 物件。
  • 缺少樣式:某些樣式屬性需要先設定背景顏色。

結論

IronXL 將 Excel 報表產生從繁瑣的手動流程轉變為自動化、可靠的工作流程。 憑藉其直覺的 API、跨平台支援和全面的功能集,開發人員可以在幾分鐘內而不是幾個小時內建立專業的 Excel 報表。 IronXL 具備易於資料整合、強大的格式設定選項和公式支援等優點,是任何使用 Excel 報表的 C# 開發人員必不可少的工具。 對於有興趣的開發者,IronXL 提供免費試用版,並為公司和個人提供更多授權選項

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

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