跳至页脚内容
使用 IRONXL

如何在 C# 中导入 Excel 文件

使用 IronXL(一款无需安装 Microsoft Excel 即可读取 XLS、XLSX 和 CSV 文件的 .NET 库)在 C# 中导入 Excel 文件。 只需使用 WorkBook.Load("file.xlsx") 即可打开文件并访问单元格数据,语法直观,如 sheet["A1"]

Microsoft Excel 是一款功能强大的电子表格软件,可协助用户进行数据整理、展示和分析。 然而,在 C# 中通过编程方式操作 Excel 可能颇具挑战性,尤其是在处理不同电子表格文件类型,或者部署服务器上未安装 Microsoft Office 时。 IronXL 库为在 C# 应用程序中导入和读取 Excel 文件提供了全面的解决方案,支持包括 XLSX、XLS 和 CSV 文件在内的多种格式。

什么是 IronXL,为什么我应该使用它来导入 Excel 文件?

IronXL 是一款 .NET Excel 库,其设计重点在于易用性、准确性和速度。 它能帮助您导入和读取 Excel 文档,并以极快的速度高效创建和编辑 Excel 文件。 与需要依赖 Microsoft Office Interop 的传统方法不同,IronXL 能够独立运行,无需依赖 MS Office Interop。 这意味着您无需安装 Excel 即可使用所有功能来读取 Excel 文件。 这使得 IronXL 成为开发者导入和读取 C# 应用程序中 Excel 文件的强大工具,无论您是在构建 ASP.NET Web 应用程序、桌面应用程序还是基于云的解决方案。

IronXL 支持所有平台,包括 Windows、LinuxmacOSDockerAzureAWS。 它兼容所有 .NET Framework 版本,并支持现代 .NET Core 及 .NET 5+ 环境。 IronXL 是一个多功能库,可集成到控制台、桌面和 Web ASP.NET 应用程序以及 Blazor 应用程序中。 它支持多种工作簿格式,如 XLS 和 XLSX 文件、XSLT 和 XLSM、CSV 以及 TSV,因此非常适合需要在电子表格文件类型之间进行转换的场景。

哪些关键功能使 IronXL 成为 Excel 导入的必备工具?

如何在 C# 中导入 Excel 工作簿?

开始导入 Excel 之前需要准备什么?

若要在 C# 中使用 IronXL 读取 Excel 文件,请确保您的计算机上已安装以下组件:

  1. Visual Studio - 这是用于开发 C# .NET 应用程序的官方集成开发环境 (IDE)。 Visual Studio 提供了出色的 IntelliSense 支持和调试工具,使处理 Excel 文件更加容易。 您可以从微软网站下载并安装 Visual Studio。 社区版是免费的,足以满足大多数开发需求。

  2. IronXL - 这是一个帮助您在 C# 中处理指定路径下 Excel 工作表的库。 使用前必须将其安装到您的 C# 程序中。 IronXL 可从 NuGet 网站轻松下载,或通过 Visual Studio 工具中的"管理 NuGet 包"界面直接安装。 如果您更倾向于手动安装,也可以直接下载 .NET Excel DLL 文件。

在生产环境中部署时,您需要应用许可证密钥以去除水印并启用全部功能。 开发和测试可使用试用版进行。

我应该在代码中添加哪些命名空间?

安装 Visual Studio 和 IronXL 后,请引用 IronXL 程序集,即可在源代码中使用 IronXL。 在新项目的文件顶部添加以下代码行,其中将使用 IronXL 功能:

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

通过导入这个单一命名空间,即可访问 Excel 操作所需的所有核心功能。 如果您正在使用 Excel 的特定功能(如图表或条件格式),可能需要从 IronXL库导入额外的命名空间。

如何加载并打开 Excel 文件?

微软Excel电子表格也称为Excel工作簿。 每个工作簿包含多个工作表(也称为表),而单个工作表包含按行和列排列的表格单元格及其对应的值。 要打开和读取 Excel 文件,请使用 IronXL 库中的WorkBook类和Load方法加载它。 代码如下

// Supported Excel spreadsheet formats for reading include: XLSX, XLS, CSV, and TSV
WorkBook workbook = WorkBook.Load("test.xlsx");

// You can also load from a stream
using (var stream = File.OpenRead("test.xlsx"))
{
    WorkBook streamWorkbook = WorkBook.Load(stream);
}

// Or load CSV files with custom delimiters
WorkBook csvWorkbook = WorkBook.LoadCSV("data.csv", delimiter: ",");
// Supported Excel spreadsheet formats for reading include: XLSX, XLS, CSV, and TSV
WorkBook workbook = WorkBook.Load("test.xlsx");

// You can also load from a stream
using (var stream = File.OpenRead("test.xlsx"))
{
    WorkBook streamWorkbook = WorkBook.Load(stream);
}

// Or load CSV files with custom delimiters
WorkBook csvWorkbook = WorkBook.LoadCSV("data.csv", delimiter: ",");
' Supported Excel spreadsheet formats for reading include: XLSX, XLS, CSV, and TSV
Dim workbook As WorkBook = WorkBook.Load("test.xlsx")

' You can also load from a stream
Using stream = File.OpenRead("test.xlsx")
    Dim streamWorkbook As WorkBook = WorkBook.Load(stream)
End Using

' Or load CSV files with custom delimiters
Dim csvWorkbook As WorkBook = WorkBook.LoadCSV("data.csv", delimiter:=",")
$vbLabelText   $csharpLabel

这将打开工作簿实例引用变量中的 Excel 文件。 由于工作簿可能包含多个工作表,您可以通过多种方式访问它们。 以下代码打开工作表实例变量中的第一个工作表:

// Get the first worksheet
WorkSheet sheet = workbook.WorkSheets.First();

// Or access by worksheet name
WorkSheet namedSheet = workbook.GetWorkSheet("Sheet1");

// Or by index (zero-based)
WorkSheet indexedSheet = workbook.WorkSheets[0];
// Get the first worksheet
WorkSheet sheet = workbook.WorkSheets.First();

// Or access by worksheet name
WorkSheet namedSheet = workbook.GetWorkSheet("Sheet1");

// Or by index (zero-based)
WorkSheet indexedSheet = workbook.WorkSheets[0];
' Get the first worksheet
Dim sheet As WorkSheet = workbook.WorkSheets.First()

' Or access by worksheet name
Dim namedSheet As WorkSheet = workbook.GetWorkSheet("Sheet1")

' Or by index (zero-based)
Dim indexedSheet As WorkSheet = workbook.WorkSheets(0)
$vbLabelText   $csharpLabel

这将打开 Excel 文件的第一个工作表,现在可以从该工作表中读取和写入 Excel 数据。 对于更复杂的场景,您可能需要管理多个工作表或通过编程方式创建新的电子表格

打开 Excel 文件

Excel电子表格,显示员工数据,包含姓名、职称和薪资三列,共包含5条员工记录,涵盖不同的职位和薪资。 包含员工信息的示例 Excel 文件,该文件将通过 C# 进行导入。 数据包含姓名、职位(经理、总监、员工、总裁)及相应的薪资数值。

导入后如何读取特定单元格的值?

导入 Excel 文件后,即可开始读取数据。 使用 IronXL 在 C# 中读取 Excel 文件数据非常简单容易。 您只需使用标准的 Excel 表示法(如"A1"、"B2"等)提及单元格引用编号,即可读取 Excel 单元格的值。 该库根据预期数据类型提供了多种访问单元格值的方法。

下面的代码检索具有引用编号 "C2" 的单元格的值:

// Select cells easily in Excel-notation and return the value
int cellValue = sheet["C2"].IntValue;

// Display the value
Console.WriteLine(cellValue);

// You can also access different data types
string textValue = sheet["A2"].StringValue;
decimal decimalValue = sheet["C2"].DecimalValue;
double doubleValue = sheet["C2"].DoubleValue;
DateTime dateValue = sheet["D2"].DateTimeValue;
bool boolValue = sheet["E2"].BoolValue;

// Check if cell is empty
bool isEmpty = sheet["F2"].IsEmpty;
// Select cells easily in Excel-notation and return the value
int cellValue = sheet["C2"].IntValue;

// Display the value
Console.WriteLine(cellValue);

// You can also access different data types
string textValue = sheet["A2"].StringValue;
decimal decimalValue = sheet["C2"].DecimalValue;
double doubleValue = sheet["C2"].DoubleValue;
DateTime dateValue = sheet["D2"].DateTimeValue;
bool boolValue = sheet["E2"].BoolValue;

// Check if cell is empty
bool isEmpty = sheet["F2"].IsEmpty;
' Select cells easily in Excel-notation and return the value
Dim cellValue As Integer = sheet("C2").IntValue

' Display the value
Console.WriteLine(cellValue)

' You can also access different data types
Dim textValue As String = sheet("A2").StringValue
Dim decimalValue As Decimal = sheet("C2").DecimalValue
Dim doubleValue As Double = sheet("C2").DoubleValue
Dim dateValue As DateTime = sheet("D2").DateTimeValue
Dim boolValue As Boolean = sheet("E2").BoolValue

' Check if cell is empty
Dim isEmpty As Boolean = sheet("F2").IsEmpty
$vbLabelText   $csharpLabel

译文如下:

! Microsoft Visual Studio 调试控制台窗口显示 Excel 文件读取操作的输出,包括文件路径和完成消息。 在 C# 中成功读取 Excel 文件后的调试控制台输出。 程序已执行完毕,正在等待用户输入以关闭。

现在,让我们从已打开的 Excel 文件中读取某个单元格范围的数据。IronXL 支持使用熟悉的 Excel 语法轻松操作单元格范围。 代码如下

// Read from a range of cells elegantly.
foreach (var cell in sheet["A2:A6"])
{
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}

// You can also work with entire rows or columns
var row = sheet.GetRow(2); // Get row 3 (0-indexed)
foreach (var cell in row)
{
    Console.WriteLine($"Row cell value: {cell.Value}");
}

// Or get a column
var column = sheet.GetColumn(0); // Get column A
foreach (var cell in column)
{
    Console.WriteLine($"Column A value: {cell.Value}");
}
// Read from a range of cells elegantly.
foreach (var cell in sheet["A2:A6"])
{
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}

// You can also work with entire rows or columns
var row = sheet.GetRow(2); // Get row 3 (0-indexed)
foreach (var cell in row)
{
    Console.WriteLine($"Row cell value: {cell.Value}");
}

// Or get a column
var column = sheet.GetColumn(0); // Get column A
foreach (var cell in column)
{
    Console.WriteLine($"Column A value: {cell.Value}");
}
' Read from a range of cells elegantly.
For Each cell In sheet("A2:A6")
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next

' You can also work with entire rows or columns
Dim row = sheet.GetRow(2) ' Get row 3 (0-indexed)
For Each cell In row
    Console.WriteLine($"Row cell value: {cell.Value}")
Next

' Or get a column
Dim column = sheet.GetColumn(0) ' Get column A
For Each cell In column
    Console.WriteLine($"Column A value: {cell.Value}")
Next
$vbLabelText   $csharpLabel

代码非常简单、干净和清晰。 可以使用简单的语法引用单元格范围,如 foreach 循环所示: sheet["A2:A6"],并且可以遍历每个单元格以获取其值。 在此,您将在控制台输出中看到 A 列第 2 行至第 6 行的名称:

Microsoft Visual Studio 调试控制台显示读取 Excel 单元格 A2 到 A6 的输出,显示以下姓名:John、Sara、Peter、Mathew 和 Katherine 使用 C# 成功读取包含姓名的 Excel 单元格范围(A2:A6)的控制台输出示例

有关读取和写入单元格值的更多详情,请参阅这篇关于在 C# 中读取 Excel 文件的示例教程。 您还可以探索应用公式使用命名区域等高级功能。

如何一次性导入整个工作表?

IronXL 可用于一次性读取 Excel 表格,使用行和列索引。 当您需要处理工作表中的所有数据,或将 Excel 转换为 CSV 或 JSON 等其他格式时,此功能尤为实用。 以下 IronXL 代码示例可帮助您将整个 Excel 文件的数据以相同格式输出到控制台:

WorkBook workbook = WorkBook.Load("test.xlsx");
WorkSheet sheet = workbook.WorkSheets.First();

// Traverse all rows of Excel WorkSheet
for (int i = 0; i < sheet.Rows.Count(); i++)
{
    // Traverse all columns of specific Row
    for (int j = 0; j < sheet.Columns.Count(); j++)
    {
        // Get the values
        string val = sheet.Rows[i].Columns[j].Value.ToString();
        Console.Write("{0}\t", val);
    }
    Console.WriteLine();
}

// Alternative method using LINQ for more efficient processing
var allData = sheet.Rows.SelectMany(row => 
    row.Columns.Select(col => col.Value?.ToString() ?? "")).ToList();
WorkBook workbook = WorkBook.Load("test.xlsx");
WorkSheet sheet = workbook.WorkSheets.First();

// Traverse all rows of Excel WorkSheet
for (int i = 0; i < sheet.Rows.Count(); i++)
{
    // Traverse all columns of specific Row
    for (int j = 0; j < sheet.Columns.Count(); j++)
    {
        // Get the values
        string val = sheet.Rows[i].Columns[j].Value.ToString();
        Console.Write("{0}\t", val);
    }
    Console.WriteLine();
}

// Alternative method using LINQ for more efficient processing
var allData = sheet.Rows.SelectMany(row => 
    row.Columns.Select(col => col.Value?.ToString() ?? "")).ToList();
Dim workbook As WorkBook = WorkBook.Load("test.xlsx")
Dim sheet As WorkSheet = workbook.WorkSheets.First()

' Traverse all rows of Excel WorkSheet
For i As Integer = 0 To sheet.Rows.Count() - 1
    ' Traverse all columns of specific Row
    For j As Integer = 0 To sheet.Columns.Count() - 1
        ' Get the values
        Dim val As String = sheet.Rows(i).Columns(j).Value.ToString()
        Console.Write("{0}" & vbTab, val)
    Next
    Console.WriteLine()
Next

' Alternative method using LINQ for more efficient processing
Dim allData = sheet.Rows.SelectMany(Function(row) 
    row.Columns.Select(Function(col) If(col.Value?.ToString(), ""))).ToList()
$vbLabelText   $csharpLabel

对于较大的 Excel 文件,您可能需要考虑使用 DataTableDataSet 对象,以获得更好的性能并更轻松地进行数据操作:

// Convert worksheet to DataTable for easier manipulation
DataTable dataTable = sheet.ToDataTable(true); // true = first row contains headers

// Process data using DataTable methods
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
// Convert worksheet to DataTable for easier manipulation
DataTable dataTable = sheet.ToDataTable(true); // true = first row contains headers

// Process data using DataTable methods
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
' Convert worksheet to DataTable for easier manipulation
Dim dataTable As DataTable = sheet.ToDataTable(True) ' True = first row contains headers

' Process data using DataTable methods
For Each row As DataRow In dataTable.Rows
    For Each item In row.ItemArray
        Console.Write($"{item}" & vbTab)
    Next
    Console.WriteLine()
Next
$vbLabelText   $csharpLabel

输出文件

Microsoft Visual Studio 调试控制台显示员工数据表,该表包含姓名、职称和薪资列,显示从 Excel 文件读取的 5 条员工记录 控制台输出成功显示了从 Excel 文件导入的员工数据,并以正确的格式呈现了姓名、职位和薪资信息。

.

导入 Excel 文件后,下一步该做什么?

本文演示了如何在未安装 Microsoft Excel 的情况下,使用 C# 导入并读取 Excel 文件。 它涵盖了从 Excel 电子表格中读取数据的多种方法,从单个单元格到整个工作表。 IronXL 还能帮助您使用 C# 创建 Excel 文件,无需安装 Excel。

成功导入 Excel 数据后,您可能希望探索更多功能:

IronXL 提供了一个一体化解决方案,用于以编程方式实现所有与 Microsoft Excel 文档相关的任务。 您可以进行公式计算、字符串或数字排序、截取和追加、查找与替换、合并和拆分单元格、保存文件等操作。 您可以编辑单元格值,设置单元格数据格式,并验证电子表格数据。 它还支持 CSV 文件,并能帮助您无缝处理 Excel 数据。

对于 Enterprise 级应用,建议探索各种平台的部署方案,包括 Docker 容器Azure FunctionsAWS Lambda

IronXL提供免费试用,其 Lite 套餐起价仅为 $799,可用于商业用途。 该库提供了详尽的文档教程代码示例,助您在 C# 应用程序中快速上手 Excel 文件操作。

常见问题解答

如何在不使用 Interop 的情况下在 C# 中导入和读取 Excel 文件?

您可以使用 IronXL 库在 C# 中导入和读取 Excel 文件。只需使用 WorkBook.Load("file.xlsx") 加载 Excel 文件即可访问并处理数据,无需安装微软 Excel。

IronXL 库兼容哪些平台?

IronXL 兼容所有 .NET Framework,并可用于包括 Windows、Linux、MacOS、Docker、Azure 和 AWS 在内的多个平台。

我可以使用 IronXL 编辑 Excel 文件而无需安装 Microsoft Excel 吗?

是的,IronXL 允许您在 C# 中以编程方式创建和编辑 Excel 文件,而无需在系统上安装 Microsoft Excel。

IronXL 可以处理哪些 Excel 格式?

IronXL 支持各种 Excel 文件格式,如 XLS、XLSX、CSV、TSV 等,能够轻松导入和操作数据。

在 C# 项目中使用 IronXL 有哪些先决条件?

要使用 IronXL,请确保已安装 Visual Studio。您可以通过 NuGet 软件包管理器添加 IronXL 到您的项目,或通过下载并引用 .NET Excel DLL。

如何在 C# 中使用 IronXL 加载 Excel 工作簿?

要在 C# 中加载 Excel 工作簿,可以使用 IronXL 的 WorkBook.Load("path/to/file.xlsx") 方法,可以打开并操作工作簿。

是否可以使用 IronXL 处理 Excel 公式?

可以,IronXL 可以在每次编辑工作表时无缝地处理和重新计算 Excel 公式,确保数据计算的准确性。

如何使用 IronXL 从特定单元格读取数据?

要从特定单元格读取数据,可以使用 IronXL 语法如 sheet["B2"].StringValue 来获取 B2 单元格的值。

我可以使用 IronXL 遍历 Excel 表格的单元格范围吗?

是的,您可以使用 IronXL 遍历单元格范围,使用语法如 foreach (var cell in sheet["A1:C3"]) 来逐个处理每个单元格。

如何将 IronXL 集成到 ASP.NET 应用程序中?

可以通过 NuGet 添加库并在项目中引用,在 ASP.NET 应用程序中轻松集成 IronXL,实现 Excel 文件操作。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我