如何使用IronXL在 C# 中打开 Excel 文件
几乎所有.NET开发人员迟早都会遇到在 C# 中打开和处理 Excel 文件的情况。无论您是自动化生成周报、处理数据导入,还是构建能够动态生成电子表格的工具,您选择的库都会对速度、可靠性和部署灵活性产生显著影响。
本教程将介绍如何使用IronXL (一个轻量级的 Excel 库,无需安装 Microsoft Office 即可读取、编辑和写入工作簿)在 C# 中打开 Excel 文件。 你会发现,在 C# 应用程序中以编程方式加载数据、访问工作表和处理单元格是多么简单。
为何选择IronXL而不是Microsoft.Office.Interop.Excel?
虽然 Microsoft.Office.Interop.Excel 一直是 Excel 自动化的传统方法,但它存在一些重大局限性,使得IronXL成为现代应用程序的更好选择。 微软自身也不建议在服务器上使用 Office Interop ,理由是其不稳定、可扩展性问题以及不支持的部署方案。
| 特征 | IronXL | Microsoft.Office.Interop.Excel |
|---|---|---|
| 需要安装 Excel | 无 | 是 |
| 跨平台支持 | Windows、Linux、macOS | 仅限 Windows |
| 服务器部署 | 全面支持 | 不建议使用(微软) |
| 内存管理 | 自动翻译 | 需要手动清理 COM 对象 |
| API 复杂度 | 简洁直观 | 复杂的 COM 接口 |
| 支持的文件格式 | XLS、XLSX、CSV、TSV、JSON | 仅限 Excel 格式 |
| 线程安全 | 支持 | 仅限单线程 |
IronXL 消除了对 Microsoft Excel 的依赖,使其非常适合服务器环境、Docker 容器以及 Azure 等云平台。 该库提供了一个简洁、现代的 API,无需处理 COM 对象或手动管理内存。 除了打开文件外,IronXL 还能处理从公式计算到图表生成再到单元格样式设置的全部操作。
如何在.NET项目中安装IronXL ?
IronXL 的入门非常简单——只需几分钟,即可通过 NuGet 包管理器将其添加到您的项目中。 在 Visual Studio 中打开软件包管理器控制台并运行:
Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
这两个命令均用于安装同一个软件包。 前者用于 Visual Studio 包管理器控制台,后者用于 .NET CLI。 安装完成后,您可以在项目文件中的 <PackageReference Include="IronXL.Excel" /> 下验证包引用是否出现。
IronXL 支持哪些 .NET 版本?
IronXL 支持所有现代 .NET 版本,包括 .NET 10、.NET 8、.NET 6、.NET Framework 4.6.2 及更高版本,以及 .NET Standard 2.0。如此广泛的支持意味着,您既可以在针对 .NET 10 的新项目中使用 IronXL,也可以在运行于传统 .NET Framework 上的旧版应用程序中使用它。
该库以单个 NuGet 包的形式提供,会根据您的目标框架自动选择正确的二进制文件。 无需额外依赖项,无需平台特定的安装,也不需要 Excel 许可证。 请访问 IronXL 兼容性指南,查看支持的运行时和平台的完整列表。
如何在 C# 中打开并读取现有的 Excel 文件?
使用IronXL打开现有的Excel文件只需几行代码。 该库通过统一的 API 支持读取 XLS 和 XLSX 文件,以及 CSV 和 TSV 格式。 以下示例展示了基本工作流程:
// Load an existing Excel file
WorkBook workbook = WorkBook.Load("sales-data.xlsx");
// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];
// Or access a worksheet by name
WorkSheet namedSheet = workbook.GetWorkSheet("January Sales");
// Read a specific cell value
string cellValue = sheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a numeric value
decimal revenue = sheet["B2"].DecimalValue;
Console.WriteLine($"Revenue: {revenue:C}");
// Check cell data type before reading
var cell = sheet["C3"];
Console.WriteLine($"Type: {cell.Type}, Value: {cell.Value}");
// Load an existing Excel file
WorkBook workbook = WorkBook.Load("sales-data.xlsx");
// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];
// Or access a worksheet by name
WorkSheet namedSheet = workbook.GetWorkSheet("January Sales");
// Read a specific cell value
string cellValue = sheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a numeric value
decimal revenue = sheet["B2"].DecimalValue;
Console.WriteLine($"Revenue: {revenue:C}");
// Check cell data type before reading
var cell = sheet["C3"];
Console.WriteLine($"Type: {cell.Type}, Value: {cell.Value}");
' Load an existing Excel file
Dim workbook As WorkBook = WorkBook.Load("sales-data.xlsx")
' Access the first worksheet by index
Dim sheet As WorkSheet = workbook.WorkSheets(0)
' Or access a worksheet by name
Dim namedSheet As WorkSheet = workbook.GetWorkSheet("January Sales")
' Read a specific cell value
Dim cellValue As String = sheet("A1").StringValue
Console.WriteLine($"Cell A1 contains: {cellValue}")
' Read a numeric value
Dim revenue As Decimal = sheet("B2").DecimalValue
Console.WriteLine($"Revenue: {revenue:C}")
' Check cell data type before reading
Dim cell = sheet("C3")
Console.WriteLine($"Type: {cell.Type}, Value: {cell.Value}")
WorkBook.Load() 方法会自动检测文件格式(XLS、XLSX、CSV 或 TSV),并处理解析,无需任何额外的配置。 您可以通过索引(使用 workbook.WorkSheets[0])或名称(使用 GetWorkSheet())访问工作表。 通过方括号表示法(sheet["A1"])可以读取各个单元格的值,从而使代码简洁明了。有关支持的文件类型的完整列表,请参阅SpreadsheetML 的 Open XML SDK 文档和IronXL NuGet 包页面。
对于类型化访问,IronXL 直接在单元格上公开了诸如 .StringValue、.DecimalValue、.IntValue、.BoolValue 和 .DateTimeValue 之类的属性。 这消除了基于通用对象的 API 中常见的类型推测问题。对于更复杂的场景,请参阅《使用 Excel 区域指南》和《单元格数据格式文档》。
输出

如何从流或字节数组加载 Excel 文件?
在 Web 应用程序和云函数中,您通常会以流或字节数组的形式接收文件数据,而非文件路径。 IronXL 同时支持以下两种情况:
// Load from a byte array (e.g., from a database or HTTP response)
byte[] fileBytes = File.ReadAllBytes("sales-data.xlsx");
WorkBook workbookFromBytes = WorkBook.Load(fileBytes);
// Load from a MemoryStream
using var memStream = new MemoryStream(fileBytes);
WorkBook workbookFromStream = WorkBook.Load(memStream);
// Access data the same way regardless of source
WorkSheet sheet = workbookFromStream.DefaultWorkSheet;
Console.WriteLine(sheet["A1"].StringValue);
// Load from a byte array (e.g., from a database or HTTP response)
byte[] fileBytes = File.ReadAllBytes("sales-data.xlsx");
WorkBook workbookFromBytes = WorkBook.Load(fileBytes);
// Load from a MemoryStream
using var memStream = new MemoryStream(fileBytes);
WorkBook workbookFromStream = WorkBook.Load(memStream);
// Access data the same way regardless of source
WorkSheet sheet = workbookFromStream.DefaultWorkSheet;
Console.WriteLine(sheet["A1"].StringValue);
Imports System
Imports System.IO
' Load from a byte array (e.g., from a database or HTTP response)
Dim fileBytes As Byte() = File.ReadAllBytes("sales-data.xlsx")
Dim workbookFromBytes As WorkBook = WorkBook.Load(fileBytes)
' Load from a MemoryStream
Using memStream As New MemoryStream(fileBytes)
Dim workbookFromStream As WorkBook = WorkBook.Load(memStream)
' Access data the same way regardless of source
Dim sheet As WorkSheet = workbookFromStream.DefaultWorkSheet
Console.WriteLine(sheet("A1").StringValue)
End Using
基于流的加载在 ASP.NET Core 控制器中特别有用,因为您会收到 IFormFile 上传。 只需调用 formFile.OpenReadStream() 并将结果传递给 WorkBook.Load()。 有关完整的 ASP.NET Core 集成模式,请参阅 ASP.NET Core Excel 教程。
如何在 C# 中创建新的 Excel 工作簿?
借助 IronXL 的电子表格创建功能,创建新的 Excel 文件同样简单直观。 以下示例演示了如何生成一份格式化的季度报告:
// Create a new workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Title = "Q1 Revenue Report";
// Create a named worksheet
WorkSheet sheet = workbook.CreateWorkSheet("Q1 Report");
// Add header row
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";
// Add data rows
sheet["A2"].Value = "Software Licenses";
sheet["B2"].Value = 120;
sheet["C2"].Value = 45000;
sheet["A3"].Value = "Support Contracts";
sheet["B3"].Value = 55;
sheet["C3"].Value = 27500;
// Add a SUM formula
sheet["C4"].Formula = "=SUM(C2:C3)";
// Apply number formatting
sheet["C2:C4"].FormatString = "$#,##0.00";
// Save the workbook to disk
workbook.SaveAs("quarterly-report.xlsx");
Console.WriteLine("Workbook saved successfully.");
// Create a new workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Title = "Q1 Revenue Report";
// Create a named worksheet
WorkSheet sheet = workbook.CreateWorkSheet("Q1 Report");
// Add header row
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";
// Add data rows
sheet["A2"].Value = "Software Licenses";
sheet["B2"].Value = 120;
sheet["C2"].Value = 45000;
sheet["A3"].Value = "Support Contracts";
sheet["B3"].Value = 55;
sheet["C3"].Value = 27500;
// Add a SUM formula
sheet["C4"].Formula = "=SUM(C2:C3)";
// Apply number formatting
sheet["C2:C4"].FormatString = "$#,##0.00";
// Save the workbook to disk
workbook.SaveAs("quarterly-report.xlsx");
Console.WriteLine("Workbook saved successfully.");
' Create a new workbook in XLSX format
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add metadata
workbook.Metadata.Author = "Sales Department"
workbook.Metadata.Title = "Q1 Revenue Report"
' Create a named worksheet
Dim sheet As WorkSheet = workbook.CreateWorkSheet("Q1 Report")
' Add header row
sheet("A1").Value = "Product"
sheet("B1").Value = "Units Sold"
sheet("C1").Value = "Revenue"
' Add data rows
sheet("A2").Value = "Software Licenses"
sheet("B2").Value = 120
sheet("C2").Value = 45000
sheet("A3").Value = "Support Contracts"
sheet("B3").Value = 55
sheet("C3").Value = 27500
' Add a SUM formula
sheet("C4").Formula = "=SUM(C2:C3)"
' Apply number formatting
sheet("C2:C4").FormatString = "$#,##0.00"
' Save the workbook to disk
workbook.SaveAs("quarterly-report.xlsx")
Console.WriteLine("Workbook saved successfully.")
WorkBook.Create() 方法以指定的格式初始化一个新的工作簿。 您可以使用 CreateWorkSheet() 添加多个工作表,使用各种数据类型(包括字符串、数字、布尔值和日期)填充单元格,并通过 Formula 属性直接应用 Excel 公式。 该库会自动处理数据类型转换以及 Excel 特有的格式要求。
若需设置表头样式或添加边框,请使用单元格样式 API。 关于基于模板的报表生成,请参阅《从现有 Excel 模板导出》指南。
输出

如何批量读取和处理 Excel 工作表数据?
IronXL 通过基于范围的操作和 DataTable 转换,高效地处理数据提取和批量处理:
// Load a workbook and select the default sheet
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Read a rectangular range of cells
var range = sheet["A1:D10"];
foreach (var cell in range)
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
// Convert the worksheet to a DataTable for database integration
System.Data.DataTable dataTable = sheet.ToDataTable(useFirstRowAsColumnHeaders: true);
Console.WriteLine($"Rows: {dataTable.Rows.Count}, Columns: {dataTable.Columns.Count}");
// Use aggregate functions directly on a range
decimal total = sheet["C2:C10"].Sum();
decimal average = sheet["C2:C10"].Avg();
decimal maxValue = sheet["C2:C10"].Max();
Console.WriteLine($"Total: {total:C}");
Console.WriteLine($"Average: {average:C}");
Console.WriteLine($"Max: {maxValue:C}");
// Filter and find rows using LINQ on the DataTable
var highValue = dataTable.AsEnumerable()
.Where(row => row.Field<decimal>("Revenue") > 10000)
.ToList();
Console.WriteLine($"High-value rows: {highValue.Count}");
// Load a workbook and select the default sheet
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Read a rectangular range of cells
var range = sheet["A1:D10"];
foreach (var cell in range)
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
// Convert the worksheet to a DataTable for database integration
System.Data.DataTable dataTable = sheet.ToDataTable(useFirstRowAsColumnHeaders: true);
Console.WriteLine($"Rows: {dataTable.Rows.Count}, Columns: {dataTable.Columns.Count}");
// Use aggregate functions directly on a range
decimal total = sheet["C2:C10"].Sum();
decimal average = sheet["C2:C10"].Avg();
decimal maxValue = sheet["C2:C10"].Max();
Console.WriteLine($"Total: {total:C}");
Console.WriteLine($"Average: {average:C}");
Console.WriteLine($"Max: {maxValue:C}");
// Filter and find rows using LINQ on the DataTable
var highValue = dataTable.AsEnumerable()
.Where(row => row.Field<decimal>("Revenue") > 10000)
.ToList();
Console.WriteLine($"High-value rows: {highValue.Count}");
Imports System
Imports System.Data
Imports System.Linq
' Load a workbook and select the default sheet
Dim workbook As WorkBook = WorkBook.Load("inventory.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Read a rectangular range of cells
Dim range = sheet("A1:D10")
For Each cell In range
Console.WriteLine($"{cell.AddressString}: {cell.Text}")
Next
' Convert the worksheet to a DataTable for database integration
Dim dataTable As DataTable = sheet.ToDataTable(useFirstRowAsColumnHeaders:=True)
Console.WriteLine($"Rows: {dataTable.Rows.Count}, Columns: {dataTable.Columns.Count}")
' Use aggregate functions directly on a range
Dim total As Decimal = sheet("C2:C10").Sum()
Dim average As Decimal = sheet("C2:C10").Avg()
Dim maxValue As Decimal = sheet("C2:C10").Max()
Console.WriteLine($"Total: {total:C}")
Console.WriteLine($"Average: {average:C}")
Console.WriteLine($"Max: {maxValue:C}")
' Filter and find rows using LINQ on the DataTable
Dim highValue = dataTable.AsEnumerable() _
.Where(Function(row) row.Field(Of Decimal)("Revenue") > 10000) _
.ToList()
Console.WriteLine($"High-value rows: {highValue.Count}")
范围选择语法(sheet["A1:D10"])提供了一种优雅的方式来一次处理多个单元格。 ToDataTable() 方法将工作表数据转换为 System.Data.DataTable,该数据可直接与 Entity Framework、数据绑定控件和 SQL 批量复制操作集成。 IronXL 还支持聚合函数-- Sum()、Avg()、Max() 和 Min() -- 直接作用于范围,从而消除了编写手动迭代代码的需要。
若需高效处理超大规模数据集,请查阅完整的 IronXL API 参考文档,了解流式处理和分块处理模式。

如何在整个工作表中筛选和搜索单元格?
除了基于范围的访问外,IronXL 还允许您按值搜索单元格、应用条件逻辑,并通过编程方式遍历行和列:
WorkBook workbook = WorkBook.Load("products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Get total row and column counts
int rowCount = sheet.RowCount;
int colCount = sheet.ColumnCount;
Console.WriteLine($"Sheet dimensions: {rowCount} rows x {colCount} columns");
// Iterate over all rows and columns
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
var cell = sheet.GetCellAt(row, col);
if (cell != null && !string.IsNullOrEmpty(cell.Text))
{
Console.WriteLine($"[{row},{col}] = {cell.Text}");
}
}
}
// Find the first cell containing specific text
var searchResult = sheet["A1:Z100"]
.FirstOrDefault(c => c.StringValue.Contains("discontinued", StringComparison.OrdinalIgnoreCase));
if (searchResult != null)
{
Console.WriteLine($"Found 'discontinued' at: {searchResult.AddressString}");
}
WorkBook workbook = WorkBook.Load("products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Get total row and column counts
int rowCount = sheet.RowCount;
int colCount = sheet.ColumnCount;
Console.WriteLine($"Sheet dimensions: {rowCount} rows x {colCount} columns");
// Iterate over all rows and columns
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
var cell = sheet.GetCellAt(row, col);
if (cell != null && !string.IsNullOrEmpty(cell.Text))
{
Console.WriteLine($"[{row},{col}] = {cell.Text}");
}
}
}
// Find the first cell containing specific text
var searchResult = sheet["A1:Z100"]
.FirstOrDefault(c => c.StringValue.Contains("discontinued", StringComparison.OrdinalIgnoreCase));
if (searchResult != null)
{
Console.WriteLine($"Found 'discontinued' at: {searchResult.AddressString}");
}
Imports System
Imports System.Linq
Dim workbook As WorkBook = WorkBook.Load("products.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Get total row and column counts
Dim rowCount As Integer = sheet.RowCount
Dim colCount As Integer = sheet.ColumnCount
Console.WriteLine($"Sheet dimensions: {rowCount} rows x {colCount} columns")
' Iterate over all rows and columns
For row As Integer = 1 To rowCount
For col As Integer = 1 To colCount
Dim cell = sheet.GetCellAt(row, col)
If cell IsNot Nothing AndAlso Not String.IsNullOrEmpty(cell.Text) Then
Console.WriteLine($"[{row},{col}] = {cell.Text}")
End If
Next
Next
' Find the first cell containing specific text
Dim searchResult = sheet("A1:Z100") _
.FirstOrDefault(Function(c) c.StringValue.Contains("discontinued", StringComparison.OrdinalIgnoreCase))
If searchResult IsNot Nothing Then
Console.WriteLine($"Found 'discontinued' at: {searchResult.AddressString}")
End If
这种模式常见于数据验证工作流中,即在进一步处理上传的文件之前,需要对其进行扫描以查找特定值。 有关高级筛选用例,请参阅 Excel 区域选择文档。
此方案支持哪些部署场景?
使用 IronXL 最实用的优势之一在于,它无需在系统中安装 Microsoft Office 即可运行。 这带来了基于 Interop 的解决方案无法比拟的部署灵活性:
云与容器部署
IronXL 可在 Azure App Service、AWS Lambda 和 Google Cloud Run 上运行,无需任何特殊配置。 由于它不依赖 Office,因此既避免了许可费用,也省去了将 Office 纳入容器镜像的复杂性。 一个使用 IronXL 的 .NET 10 应用程序的最小 Dockerfile 仅需标准的 .NET 运行时镜像。
基于 Docker 的部署同样简单直观。 IronXL Docker 指南涵盖了 Debian、Alpine 和 Windows 容器的配置。 在所有情况下,您均可通过 NuGet 安装 IronXL,且无需额外系统组件即可运行。
服务器与 CI/CD 管道的使用
服务器环境通常不具备图形用户界面(GUI),且无法运行依赖于 Windows 桌面会话的应用程序。 IronXL 完全在无头模式下运行,因此适用于:
- 在计划的后台任务中生成 Excel 报表
- 在 .NET Core API 中处理上传的电子表格
- 在自动化管道中将 DataTable 或数据库查询结果导出为 XLSX
- 在 CI/CD 测试运行期间验证导入的数据文件
关于 .NET Core 的具体内容,请参阅 .NET Core Excel 导出教程,该教程涵盖了文件流、响应头以及正确的资源释放模式。
跨平台开发
IronXL 支持 .NET Standard 2.0,并可在 Linux 和 macOS 上原生运行,从而支持跨平台开发工作流。 macOS 上的开发人员可以在本地编写和测试 Excel 生成代码,并完全确信相同的二进制文件在 Linux 生产服务器上也能以完全相同的方式运行。 无需涉及特定平台的 API 或条件编译代码块。
有关支持环境的更多详情,请访问 IronXL 入门指南。
除了基本的读取操作外,您如何处理常见的 Excel 操作?
读取和写入单元格仅仅是基础。 实际应用中的 Excel 自动化通常涉及格式设置、公式、工作表管理以及格式转换。
设置单元格格式和应用样式
IronXL 提供了一个完整的样式 API,涵盖字体、颜色、边框、对齐方式和数字格式:
WorkBook workbook = WorkBook.Load("report.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Apply bold, font size, and background color to header row
var headerRange = sheet["A1:F1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
headerRange.Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center;
// Format a currency column
sheet["D2:D100"].FormatString = "$#,##0.00";
// Apply a date format
sheet["E2:E100"].FormatString = "yyyy-MM-dd";
// Add borders to a data range
var dataRange = sheet["A1:F20"];
dataRange.Style.Border.Bottom.Type = IronXL.Styles.BorderType.Thin;
dataRange.Style.Border.Right.Type = IronXL.Styles.BorderType.Thin;
workbook.SaveAs("formatted-report.xlsx");
WorkBook workbook = WorkBook.Load("report.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Apply bold, font size, and background color to header row
var headerRange = sheet["A1:F1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
headerRange.Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center;
// Format a currency column
sheet["D2:D100"].FormatString = "$#,##0.00";
// Apply a date format
sheet["E2:E100"].FormatString = "yyyy-MM-dd";
// Add borders to a data range
var dataRange = sheet["A1:F20"];
dataRange.Style.Border.Bottom.Type = IronXL.Styles.BorderType.Thin;
dataRange.Style.Border.Right.Type = IronXL.Styles.BorderType.Thin;
workbook.SaveAs("formatted-report.xlsx");
Imports IronXL
Dim workbook As WorkBook = WorkBook.Load("report.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Apply bold, font size, and background color to header row
Dim headerRange = sheet("A1:F1")
headerRange.Style.Font.Bold = True
headerRange.Style.Font.Height = 12
headerRange.Style.SetBackgroundColor("#4472C4")
headerRange.Style.Font.Color = "#FFFFFF"
headerRange.Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center
' Format a currency column
sheet("D2:D100").FormatString = "$#,##0.00"
' Apply a date format
sheet("E2:E100").FormatString = "yyyy-MM-dd"
' Add borders to a data range
Dim dataRange = sheet("A1:F20")
dataRange.Style.Border.Bottom.Type = IronXL.Styles.BorderType.Thin
dataRange.Style.Border.Right.Type = IronXL.Styles.BorderType.Thin
workbook.SaveAs("formatted-report.xlsx")
有关样式设置选项的完整指南,请参阅如何设置单元格、边框和字体的样式。
在 Excel 和 CSV 格式之间转换
IronXL 可直接处理格式转换,支持将 CSV 文件加载并保存为 XLSX,或将 XLSX 文件导出为 CSV 以供后续处理:
// Load a CSV file and save as XLSX
WorkBook csvBook = WorkBook.Load("data-import.csv");
csvBook.SaveAs("data-import.xlsx");
// Load an XLSX file and export as CSV
WorkBook xlsxBook = WorkBook.Load("report.xlsx");
xlsxBook.DefaultWorkSheet.SaveAsCsv("report.csv");
// Load a CSV file and save as XLSX
WorkBook csvBook = WorkBook.Load("data-import.csv");
csvBook.SaveAs("data-import.xlsx");
// Load an XLSX file and export as CSV
WorkBook xlsxBook = WorkBook.Load("report.xlsx");
xlsxBook.DefaultWorkSheet.SaveAsCsv("report.csv");
' Load a CSV file and save as XLSX
Dim csvBook As WorkBook = WorkBook.Load("data-import.csv")
csvBook.SaveAs("data-import.xlsx")
' Load an XLSX file and export as CSV
Dim xlsxBook As WorkBook = WorkBook.Load("report.xlsx")
xlsxBook.DefaultWorkSheet.SaveAsCsv("report.csv")
有关 CSV 处理的更多详细信息,包括分隔符配置和编码选项,请参阅 C# CSV 读取器教程和 CSV 转 XLSX 转换指南。
如何开始免费试用?
IronXL 提供免费开发许可证供下载,您可在决定购买前测试其全部功能。 试用期间无功能限制——您评估的正是生产环境中运行的同一套库。
开始使用:
- 通过 NuGet 安装该包:
dotnet add package IronXLdotnet add package IronXLSHELL - 访问 IronXL 许可页面获取免费试用许可证。
- 在调用任何 IronXL 方法之前,请先在代码中应用该密钥:
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";Imports IronXL IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"$vbLabelText $csharpLabel
提供面向个人开发者、团队及组织的许可方案。 IronXL 产品页面提供了完整的定价详情和部署选项,包括免版税的分发权限。 如需全面了解 Iron Software 的所有产品及其集成方式,请参阅 Iron Software 产品套件。
常见问题解答
如何在 C# 中打开 Excel 文件而无需 Microsoft Office?
您可以使用 IronXL 在 C# 中打开 Excel 文件,而无需 Microsoft Office。IronXL 提供了一个优于 Interop 的现代替代方案,具有更好的性能且无 Excel 依赖。
使用 IronXL 处理 C# 中的 Excel 文件有哪些好处?
IronXL 提供了多项好处,包括提高性能,无需依赖 Excel 安装,且在部署方面具有更大的灵活性。它允许开发者高效地自动生成报告、读取数据导入和生成电子表格。
IronXL 能处理 Excel 文件的自动化任务吗?
可以,IronXL 非常适合用于生成每周报告、读取数据导入和创建动态电子表格生成工具等自动化任务。
IronXL 是 C# 应用程序中 Interop 的适合替代品吗?
IronXL 是 Interop 的适当替代品,提供了一种现代解决方案,无需 Excel 依赖,并在处理 Excel 文件时提高了应用性能。
IronXL 支持读取和写入 Excel 文件吗?
IronXL 完全支持读取和写入 Excel 文件,成为 .NET 开发者处理电子表格数据的多功能工具。


