為 .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");
}
}
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
輸出 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
});
}
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
輸出
建立適用於 .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")
};
}
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
使用具有預先定義佈局的 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;
' 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
IronXL 支援大多數標準 Excel 函數,包括數學、統計、文字、日期和查找類別。 對於高級場景,也支援數組公式(Ctrl+Shift+Enter 語義)。 由於公式計算是在 .NET 進程內部進行的,因此無需與外部計算服務進行往返通信——公式分配後即可立即獲得結果,即使計算數千行數據,也能保持 API 響應時間的可預測性。 公式支援參考列表列出了所有支援的函數。
下一步計劃是什麼?
使用 IronXL 建立 Excel API 可以為 .NET Core 應用程式提供強大的電子表格處理能力。 從建立包含格式化數據和計算公式的 XLSX 文件,到匯入使用者上傳內容和以多種格式匯出數據,IronXL 以跨平台、無需 Office 的方式處理程式化電子表格操作的方方面面。
探索以下資源,了解更多:
IronXL 產品頁面-功能概述和入門指南
- IronXL 文件-完整的 API 參考與操作指南文章 -使用 C# 建立 Excel 檔案-工作簿和工作表建立的詳細教學 -使用 C# 讀取 Excel 檔案-載入、解析和提取數據 -將 Excel 匯出為 CSV -- 匯出帶有編碼和分隔符號選項的 CSV 文件 -儲存格格式設定 API -- 字型、顏色、邊框和數字格式 -條件格式-規則、資料條、顏色標度 -公式支援-- 支援的 Excel 函數參考 文件保護-工作簿和工作表密碼API
- NuGet 套件-- 目前版本和版本歷史記錄
常見問題解答
IronXL 是什麼?
IronXL 是一個 .NET Excel 庫,它允許開發人員使用 C# 以程式設計方式建立、讀取和匯出 Excel 文件,而無需 Microsoft Office 或 COM 互通。
如何在不使用 Office 的情況下,使用 .NET Core 建立 Excel 檔案?
呼叫 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 及更高版本,可在 Windows、Linux 和 macOS 上運行,無需安裝任何 Microsoft Office 或 COM 層。
如何使用 IronXL 對 Excel 檔案進行密碼保護?
在呼叫 SaveAs() 之前,請將 workbook.Password 設定為字串。若要實現工作表層級的保護,請呼叫 worksheet.ProtectSheet('password') 以防止編輯單元格,同時允許讀取工作表。


