跳至頁尾內容
USING IRONXL

為 .NET Core 建立 Excel API:建立、讀取和匯出 XLSX 文件

利用IronXL為 .NET Core 建立 Excel API 非常簡單。 安裝套件、建立 WorkBook、填充單元格,並直接返回流——無需 Microsoft Office。

Install-Package IronXL.Excel

IronXL 完全以受控 .NET 程式碼處理 XLSX 建立、資料匯入、多格式導出和單元格樣式。 它可以在 Windows、Linux 和 macOS 上運行,這使得它成為任何需要程式化 Excel 支持的 ASP.NET Core API 的實用選擇。

如何在 .NET Core 專案中安裝 IronXL?

通過 NuGet 套件管理器控制台將 IronXL 新增到任何 .NET 10 項目中:

Install-Package IronXL.Excel

或者在 Visual Studio NuGet UI 上搜尋IronXL進行安裝。 NuGet 上的套件名稱是IronXL.Excel

安裝後,將 using IronXL; 新增到任何建立或讀取活頁簿的文件中。 不需要 Office 插件庫,不需要註冊 COM,也不需要在主機上安裝 Microsoft Excel——IronXL 完全獨立。

IronXL 支持 .NET Standard 2.0 及以上版本,這意味著同一個程式庫適用於 .NET Core、.NET 5/6/7/8/9/10 和 .NET Framework 項目。 IronXL 文件詳述了所有支持的環境。

如何在 .NET Core 中程式化地建立 Excel 文件?

using IronXL 的直觀 API,從頭開始建立 Excel 文件只需要幾行程式碼。 該程式庫通過乾淨的物件模型提供對活頁簿、工作表、單元格樣式和公式的全面控制。

這是一個控制器動作,建立了一個包含格式化資料的新 Excel 活頁簿,展示了工作表管理,並應用了單元格樣式:

using IronXL;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpGet("create-report")]
    public IActionResult CreateSalesReport()
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Set header labels in the first row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Q1 Sales";
        worksheet["C1"].Value = "Q2 Sales";
        worksheet["D1"].Value = "Total";

        // Bold headers and apply a blue background with white text
        worksheet["A1:D1"].Style.Font.Bold = true;
        worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
        worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");

        // Add data rows
        worksheet["A2"].Value = "Widget Pro";
        worksheet["B2"].Value = 15000;
        worksheet["C2"].Value = 18500;
        worksheet["D2"].Formula = "=B2+C2";

        worksheet["A3"].Value = "Gadget Plus";
        worksheet["B3"].Value = 22000;
        worksheet["C3"].Value = 24000;
        worksheet["D3"].Formula = "=B3+C3";

        // Apply currency number format to sales columns
        worksheet["B2:D3"].Style.Format = "$#,##0";

        // Stream the XLSX file back to the caller
        var stream = workbook.ToStream();
        return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx");
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpGet("create-report")]
    public IActionResult CreateSalesReport()
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Set header labels in the first row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Q1 Sales";
        worksheet["C1"].Value = "Q2 Sales";
        worksheet["D1"].Value = "Total";

        // Bold headers and apply a blue background with white text
        worksheet["A1:D1"].Style.Font.Bold = true;
        worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
        worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");

        // Add data rows
        worksheet["A2"].Value = "Widget Pro";
        worksheet["B2"].Value = 15000;
        worksheet["C2"].Value = 18500;
        worksheet["D2"].Formula = "=B2+C2";

        worksheet["A3"].Value = "Gadget Plus";
        worksheet["B3"].Value = 22000;
        worksheet["C3"].Value = 24000;
        worksheet["D3"].Formula = "=B3+C3";

        // Apply currency number format to sales columns
        worksheet["B2:D3"].Style.Format = "$#,##0";

        // Stream the XLSX file back to the caller
        var stream = workbook.ToStream();
        return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx");
    }
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("api/[controller]")>
Public Class ExcelController
    Inherits ControllerBase

    <HttpGet("create-report")>
    Public Function CreateSalesReport() As IActionResult
        ' Create a new Excel workbook in XLSX format
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Sales Data")

        ' Set header labels in the first row
        worksheet("A1").Value = "Product"
        worksheet("B1").Value = "Q1 Sales"
        worksheet("C1").Value = "Q2 Sales"
        worksheet("D1").Value = "Total"

        ' Bold headers and apply a blue background with white text
        worksheet("A1:D1").Style.Font.Bold = True
        worksheet("A1:D1").Style.SetBackgroundColor("#4472C4")
        worksheet("A1:D1").Style.Font.SetColor("#FFFFFF")

        ' Add data rows
        worksheet("A2").Value = "Widget Pro"
        worksheet("B2").Value = 15000
        worksheet("C2").Value = 18500
        worksheet("D2").Formula = "=B2+C2"

        worksheet("A3").Value = "Gadget Plus"
        worksheet("B3").Value = 22000
        worksheet("C3").Value = 24000
        worksheet("D3").Formula = "=B3+C3"

        ' Apply currency number format to sales columns
        worksheet("B2:D3").Style.Format = "$#,##0"

        ' Stream the XLSX file back to the caller
        Dim stream = workbook.ToStream()
        Return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx")
    End Function
End Class
$vbLabelText   $csharpLabel

輸出Excel文件

為 .NET Core 建立 Excel API:建立、讀取和匯出 XLSX 文件:圖1 - 由 .NET Core API 生成的 Excel 文件

WorkBook.Create() 支持 XLSX 和 XLS 格式。 CreateWorkSheet() 方法新增了一個命名的工作表,您可以在其中填充單元格值,應用 Excel 公式進行計算,並通過單元格範圍控制佈局。 IronXL 的計算引擎在活頁簿資料更改時自動評估公式,包括支持在更複雜的資料分析場景中使用的陣列公式。

單元格樣式遠不止於粗體和顏色。 單元格格式 API允許您設置數字格式、邊框、對齊、字體大小等——所有這些都不需要接觸 COM 層。 這使得它能安全地在沒有顯示上下文的容器化 Linux 環境中運行。

如何將多個工作表新增到活頁簿中?

單個活頁簿可以容納任意數量的工作表。 為每個所需的標籤調用 workbook.CreateWorkSheet("SheetName")。 可以通過名稱通過 workbook.GetWorkSheet("SheetName") 或通過索引通過 workbook.WorkSheets[0] 以後存取工作表。

此模式在生成匯總加詳情報告時很有用:一個工作表保存聚合總計,而子工作表保存原始交易記錄。 工作表管理文件介紹了在運行時重命名、重新排列和刪除工作表。

在 Web API 中讀取 Excel 資料的最佳方法是什麼?

從使用者上傳的 Excel 文件中匯入資料對於任何處理電子表格內容的 Web 應用程式都是必需的。 IronXL 使讀取 Excel 電子表格變得直接——從流中載入,遍歷行,並從每個單元格中提取型別化值。

[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = file.OpenReadStream();

    // Load the workbook directly from the upload stream
    WorkBook workbook = WorkBook.Load(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    var records = new List<Dictionary<string, object>>();

    // Start at row 2 to skip the header row
    for (int row = 2; row <= worksheet.RowCount; row++)
    {
        var record = new Dictionary<string, object>
        {
            ["Product"] = worksheet[$"A{row}"].StringValue,
            ["Sales"]   = worksheet[$"B{row}"].DecimalValue,
            ["Date"]    = worksheet[$"C{row}"].DateTimeValue
        };
        records.Add(record);
    }

    return Ok(new {
        message     = "Import successful",
        recordCount = records.Count,
        data        = records
    });
}
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = file.OpenReadStream();

    // Load the workbook directly from the upload stream
    WorkBook workbook = WorkBook.Load(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    var records = new List<Dictionary<string, object>>();

    // Start at row 2 to skip the header row
    for (int row = 2; row <= worksheet.RowCount; row++)
    {
        var record = new Dictionary<string, object>
        {
            ["Product"] = worksheet[$"A{row}"].StringValue,
            ["Sales"]   = worksheet[$"B{row}"].DecimalValue,
            ["Date"]    = worksheet[$"C{row}"].DateTimeValue
        };
        records.Add(record);
    }

    return Ok(new {
        message     = "Import successful",
        recordCount = records.Count,
        data        = records
    });
}
Imports Microsoft.AspNetCore.Mvc
Imports System.Collections.Generic
Imports IronXL

<HttpPost("import")>
Public Function ImportExcelData(file As IFormFile) As IActionResult
    If file Is Nothing OrElse file.Length = 0 Then
        Return BadRequest("No file uploaded")
    End If

    Using stream = file.OpenReadStream()
        ' Load the workbook directly from the upload stream
        Dim workbook As WorkBook = WorkBook.Load(stream)
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet

        Dim records As New List(Of Dictionary(Of String, Object))()

        ' Start at row 2 to skip the header row
        For row As Integer = 2 To worksheet.RowCount
            Dim record As New Dictionary(Of String, Object) From {
                {"Product", worksheet($"A{row}").StringValue},
                {"Sales", worksheet($"B{row}").DecimalValue},
                {"Date", worksheet($"C{row}").DateTimeValue}
            }
            records.Add(record)
        Next

        Return Ok(New With {
            .message = "Import successful",
            .recordCount = records.Count,
            .data = records
        })
    End Using
End Function
$vbLabelText   $csharpLabel

輸出

為 .NET Core 建立 Excel API:建立、讀取和匯出 XLSX 文件:圖2 - 展示成功導入的 Excel 資料

WorkBook.Load()從流、文件路徑或字節陣列中打開 Excel 文件。 通過 worksheet["A1"] 索引語法或遍歷命名的單元格範圍來存取單元格。 IronXL 自動處理資料驗證並公開型別安全的存取器——StringValue——使消費程式碼保持乾淨且可預測。

如何篩選和排序導入的資料?

載入活頁簿後,調用 .SortAscending().SortDescending() 在任何 Range 物件上進行排序。 對於篩選,遍歷單元格並內聯評估條件,或將資料轉移到 LINQ 集合中進行進一步處理。 排序和篩選指南通過實用範例展示了這兩種方法。

處理大文件上傳? IronXL 僅讀取存取的單元格,因此在查詢特定列之前不需要將整個多兆字節文件載入到記憶體中。 這種延遲存取方法即使在處理含有數萬行的活頁簿時也能保持記憶體消耗穩定。

如何將 Excel 資料匯出為不同格式?

應用程式經常需要以多種輸出格式提供電子表格。 IronXL 支持匯出為 XLSX、XLS、CSV、JSON 和 HTML,只需單一方法調用,無需外部轉換工具。

[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
    // Load a pre-designed template workbook
    WorkBook workbook = WorkBook.Load("template.xlsx");

    return format.ToLower() switch
    {
        "xlsx" => File(
            workbook.ToStream(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx"),

        "csv"  => File(
            workbook.ToStream(FileFormat.CSV),
            "text/csv",
            "export.csv"),

        "json" => Ok(workbook.ToJson()),

        _      => BadRequest("Unsupported format")
    };
}
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
    // Load a pre-designed template workbook
    WorkBook workbook = WorkBook.Load("template.xlsx");

    return format.ToLower() switch
    {
        "xlsx" => File(
            workbook.ToStream(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx"),

        "csv"  => File(
            workbook.ToStream(FileFormat.CSV),
            "text/csv",
            "export.csv"),

        "json" => Ok(workbook.ToJson()),

        _      => BadRequest("Unsupported format")
    };
}
Imports Microsoft.AspNetCore.Mvc

<HttpGet("export/{format}")>
Public Function ExportData(format As String) As IActionResult
    ' Load a pre-designed template workbook
    Dim workbook As WorkBook = WorkBook.Load("template.xlsx")

    Select Case format.ToLower()
        Case "xlsx"
            Return File(workbook.ToStream(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "export.xlsx")
        Case "csv"
            Return File(workbook.ToStream(FileFormat.CSV), "text/csv", "export.csv")
        Case "json"
            Return Ok(workbook.ToJson())
        Case Else
            Return BadRequest("Unsupported format")
    End Select
End Function
$vbLabelText   $csharpLabel

使用具有預定義佈局的 Excel 模板加速報表生成。 載入預設計活頁簿,將動態資料填入命名單元格或範圍,然後流式傳輸結果。 這種方法適合銷售報告、發票和合規文件,在這些文件中,格式的一致性比靈活性更為重要。

IronXL 的跨平台支持意味著這些文件操作在 Windows、Linux 和 macOS 上的工作方式相同,使其適宜 .NET Core 容器化部署。 請參閱IronXL 跨平台指南以了解更多。

如何從 .NET Core API 匯出到 CSV?

調用 workbook.ToStream(FileFormat.CSV) 並將其與所示的 text/csv內容型別一起返回。 對於多工作表活頁簿,可以通過存取 workbook.WorkSheets[index] 並在工作表物件上調用 .ToStream(FileFormat.CSV) 獨立匯出每個工作表。 CSV 導出文件涵蓋了分隔符、編碼和日期格式選項的處理。

如何應用條件格式和資料條?

除了基本的單元格樣式,IronXL 支持條件格式規則——將閾值以上的單元格用綠色高亮顯示,將負值標記為紅色,或應用漸變資料條,無需在獨立工具中後期處理即可立即在電子表格中突出顯示趨勢。

在財務儀錶板和 KPI 報告中,條件格式尤其有價值,讀者需要一目了然地發現異常值。 而不是依賴收件人在下載後自行應用格式,規則嵌入在 XLSX 文件中並在文件在任何版本的 Microsoft Excel 或相容的檢視器中打開時自動評估。

通過工作表的 ConditionalFormatting 屬性設置條件格式。 規則應用於命名單元格範圍,支持多種條件型別:單元格值比較、基於公式的規則,從低到高對值進行分級的顏色比例,以及類似於單元格內條形圖的資料條覆蓋。 Open XML 規範定義了 IronXL 寫入 XLSX 文件中的基本規則結構。

有關應用顏色比例、圖示集和資料條的完整參考,請參閱 IronXL 文件中的條件格式教學

如何保護 Excel 文件和工作表?

分發包含敏感資料的報告需要一層存取控制。 IronXL 支持活頁簿級別密碼保護和工作表級別保護:

  • 活頁簿密碼: 在調用 .SaveAs() 之前設置 workbook.Password = "secret" 以加密 XLSX 文件。收件人必須輸入密碼才能在 Excel 中打開它。
  • 工作表保護:調用 worksheet.ProtectSheet("password") 以鎖定單元格編輯,同時仍允許視圖工作表。 使用 AllowEditRange API 可以解鎖特定範圍以進行資料輸入。
  • 唯讀分發:對於絕不應編輯的文件,結合工作表保護與文件級加密。

密碼保護的 XLSX 文件預設使用 AES-128 加密,這與 Excel 的本機應用標準相同。 這意味著通過 IronXL 保護的文件完全與 Excel 的內建打開文件提示相容——收件方不需要特殊檢視工具。

這些安全功能補充了標準 .NET Core 安全模型,尤其是在建立財務或人力資源報告端口時特別有用。 文件保護文件提供了完整的 API 參考。

如何在 .NET 中使用 Excel 公式?

IronXL 的內建計算引擎在運行時評估標準 Excel 公式,這樣 API 就可以在不保存到磁盤並首先在 Excel 中重新打開的情況下返回計算值。將公式字串分配給任何單元格的 .Formula 屬性:

// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";

// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";

// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";

// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";

// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
' Sum a column and place the result in a footer row
worksheet($"B{lastRow}").Formula = $"=SUM(B2:B{lastRow - 1})"

' Calculate an average across a range
worksheet($"C{lastRow}").Formula = $"=AVERAGE(C2:C{lastRow - 1})"

' Retrieve the computed value immediately
Dim total As Decimal = worksheet($"B{lastRow}").DecimalValue
$vbLabelText   $csharpLabel

IronXL 支持大多數標準的 Excel 函式,包括數學、統計、文字、日期和查找類別。 還支持高級場景中的陣列公式(Ctrl+Shift+Enter 語義)。 由於公式評估在 .NET 過程中進行,因此不存在往返於外部計算服務的情況——公式分配後結果立即可用,這使得即使在計算數千行時 API 響應時間也能保持可預測。 公式支持參考列出所有支持的函式。

您接下來的步驟是什麼?

using IronXL 構建的 Excel API 為 .NET Core 應用程式提供了堅實的處理電子表格的功能。 從建立具有格式化資料和計算公式的 XLSX 文件,到導入使用者上傳內容以及導出多種格式的資料,IronXL 在跨平台、無需 Office 的方式中處理程式化電子表格操作的每一個方面。

探索這些資源以更進一步:

開始免費試用以在現實項目中測試 IronXL,或者檢視授權選項以尋找適合的生產部署方案。

常見問題

什麼是IronXL?

IronXL是一個.NET Excel程式庫,允許開發者在C#中程式化地建立、讀取和匯出Excel檔案,而不需要Microsoft Office或COM互操作。

如何在.NET Core 中建立Excel檔案而無需Office?

呼叫WorkBook.Create(ExcelFileFormat.XLSX)建立新的工作簿,使用CreateWorkSheet()新增工作表,用worksheet['A1'].Value語法填充單元格,並使用workbook.ToStream()流式傳輸結果。

如何在ASP.NET Core中讀取上傳的Excel檔案?

將IFormFile流傳遞給WorkBook.Load(stream),存取DefaultWorkSheet,並使用worksheet.RowCount迭代行。型別化存取器如DecimalValue和DateTimeValue從每個單元格中提取強型別的資料。

IronXL能匯出Excel資料到CSV或JSON嗎?

可以。呼叫workbook.ToStream(FileFormat.CSV)以獲取CSV輸出,或workbook.ToJson()以獲取工作簿資料的JSON表示。

IronXL能在Linux和macOS上運行嗎?

是的。IronXL 支援.NET Standard 2.0及以上版本,並在不安裝Microsoft Office或COM層的情況下,在Windows、Linux和macOS上運行。

您如何使用IronXL密碼保護Excel檔案?

在呼叫SaveAs()之前,將workbook.Password設置為一個字串。對於工作表級保護,呼叫worksheet.ProtectSheet('password')以防止單元格編輯,同時允許閱讀工作表。

Curtis Chau
技術作家

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

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

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