跳過到頁腳內容
使用 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;。 IronXL完全獨立,無需 Office 互通庫、COM 註冊或安裝 Microsoft Excel,主機上即可運作。

IronXL 的目標平台是.NET Standard 2.0 及更高版本,這表示同一個函式庫可以用於.NET Core、 .NET 5/6/7/8/9/10 和.NET Framework專案。 IronXL文件詳細介紹了所有支援的環境。

如何在.NET Core中以程式設計方式建立Excel檔案?

使用 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");
    }
}
$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 資料的最佳方法是什麼?

對於任何處理電子表格內容的 Web 應用程式來說,從使用者上傳的 Excel 檔案匯入資料至關重要。 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
    });
}
$vbLabelText   $csharpLabel

輸出

為.NET Core建置Excel API:建立、讀取和匯出XLSX檔:圖2 - 顯示成功匯入的Excel資料的輸出

WorkBook.Load() 從流、檔案路徑或位元組陣列開啟 Excel 檔案。 可以透過 worksheet["A1"] 索引器語法或透過迭代命名的儲存格範圍來存取儲存格。 IronXL會自動處理資料驗證,並公開類型安全的存取器 -- IntValue, DecimalValue, DateTimeValue, StringValue @ 因此,使用程式碼保持簡潔和可預測。

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

載入工作簿後,對任何 .SortAscending() 物件呼叫 .SortDescending() 以對行進行排序。 對於篩選,可以遍歷單元格並線上評估條件,或將資料傳輸到 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")
    };
}
$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() 加密 XLSX 檔案之前,請設定 workbook.Password = "secret"。收件者必須輸入密碼才能在 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;
$vbLabelText   $csharpLabel

IronXL支援大多數標準 Excel 函數,包括數學、統計、文字、日期和查找類別。 對於高級場景,也支援數組公式(Ctrl+Shift+Enter 語義)。 由於公式計算是在.NET進程內部進行的,因此無需與外部計算服務進行往返通信——公式分配後即可立即獲得結果,即使計算數千行數據,也能保持 API 響應時間的可預測性。 公式支援參考列表列出了所有支援的函數。

下一步計劃是什麼?

使用IronXL建立 Excel API 可以為.NET Core應用程式提供強大的電子表格處理能力。 從建立包含格式化數據和計算公式的 XLSX 文件,到匯入使用者上傳內容和以多種格式匯出數據, IronXL以跨平台、無需 Office 的方式處理程式化電子表格操作的方方面面。

探索以下資源,了解更多:

IronXL產品頁面-功能概述和入門指南

開始免費試用,在實際專案中測試IronXL ,或檢視授權選項,找到適合生產部署的方案。

常見問題解答

IronXL 是什麼?

IronXL 是一款 .NET Excel 程式庫,讓開發人員能夠在 C# 中透過程式設計方式建立、讀取及匯出 Excel 檔案,無需 Microsoft Office 或 COM 互通。

如何在沒有 Office 的情況下,於 .NET Core 中建立 Excel 檔案?

呼叫 WorkBook.Create(ExcelFileFormat.XLSX) 建立新工作簿,使用 CreateWorkSheet() 新增工作表,透過 worksheet['A1'].Value 語法填入儲存格內容,並使用 workbook.ToStream() 將結果串流輸出。

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

將 IFormFile 串流傳遞給 WorkBook.Load(stream),存取 DefaultWorkSheet,並使用 worksheet.RowCount 遍歷各行。透過 DecimalValue 和 DateTimeValue 等強類型存取器,可從每個儲存格中擷取強類型資料。

IronXL 能否將 Excel 資料匯出為 CSV 或 JSON 格式?

是的。若要輸出 CSV 格式,請呼叫 workbook.ToStream(FileFormat.CSV);若要將工作簿資料轉換為 JSON 格式,請呼叫 workbook.ToJson()。

IronXL 是否可在 Linux 和 macOS 上運行?

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

如何使用 IronXL 為 Excel 檔案設定密碼保護?

在呼叫 SaveAs() 之前,請先將 workbook.Password 設定為字串。若要設定工作表層級的保護,請呼叫 worksheet.ProtectSheet('password'),以防止儲存格編輯,同時允許讀取該工作表。

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

Iron Support Team

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