C#实现读取Excel文件并将数据写入数据库和DataTable
作者:Eiceblue
Excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。C#语言借助.NET Framework和各种库的广泛功能,能够进行高效的数据操作。利用C#读取Excel文件并将数据写入数据库和DataTable,或者将数据用于其他目的,对于开发人员来说是一个处理Excel数据的优秀解决方案。
本文所使用的方法需要用到Excel文件处理库Spire.XLS for .NET,可从官网下载或在NuGet中搜索安装,也可在项目管理控制台输入:PM> Install-Package Spire.XLS安装。
使用C#读取Excel文件引导
为了有效地利用Spire.XLS for .NET读取Excel文件数据并写入其他位置,需要熟悉其中的一些类、属性和方法。下表总结了一些主要的类、属性和方法以及它们的功能和描述:
项目 | 描述 |
---|---|
Workbook | 代表Excel工作簿并提供读取和操作其内容的方法 |
Worksheet | 代表工作簿中的单个工作表 |
Workbook.LoadFromFile 方法 | 从文件加载Excel工作簿 |
Workbook.Worksheets 属性 | 获取工作簿中的工作表集合 |
Worksheet.Range[] 属性 | 获取工作表中的单元格范围(索引从1开始) |
CellRange.Value 属性 | 获取或设置单元格的值 |
CellRange.Text 属性 | 获取或设置单元格的显示文本 |
读取Excel文件的典型工作流程包括以下步骤:
- 使用 Workbook.LoadFromFile() 方法加载Excel文件。
- 通过 Workbook.Worksheets[] 属性访问工作表。
- 通过 Worksheet.Range[] 属性访问单元格。
- 通过 CellRange.Text 属性访问单元格中显示的文本,或通过 CellRange.Value 属性访问单元格的值(文本、数字、公式等)。
- 检索数据,将数据写入文本文件、数据库等,或执行其他所需操作。
- 可以直接使用 Worksheet.ExportDataTable() 方法将单元格值导出到数据表,并返回一个DataTable对象。
- 还可以直接使用 Workbook.SaveToFile() 方法将工作簿转换为任何支持的格式。
C#代码读取Excel文件数据并写入文本
使用C#读取Excel文件并将数据写入文本文件的步骤如下:
- 导入所需的命名空间。
- 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
- 通过 Workbook.Worksheets[] 属性获取第一个工作表。
- 创建一个文本文件用于写入工作表中的数据。
- 遍历分配的行和列,在 Worksheet.Range[] 属性中访问单元格,并通过 CellRange.Text 属性获取每个单元格的显示文本,然后将其写入文本文件中。
- 释放资源。
代码示例:
using Spire.Xls; using System.IO; class Program { static void Main(string[] args) { // 加载Excel文件 Workbook workbook = new Workbook(); workbook.LoadFromFile("Sample.xlsx"); // 获取第一个工作表 Worksheet worksheet = workbook.Worksheets[0]; // 创建输出文本文件 string outputFile = "Output.txt"; StreamWriter writer = new StreamWriter(outputFile); // 遍历工作表的行和列,并将数据写入文本文件 for (int row = 1; row <= worksheet.LastRow; row++) { for (int col = 1; col <= worksheet.LastColumn; col++) { CellRange range = worksheet.Range[row, col]; string cellValue = range.Text == null ? string.Empty : range.Text.ToString(); writer.Write(cellValue + "\t"); // 使用制表符作为单元格数据的分隔符 } writer.WriteLine(); // 写入换行符 } // 关闭写入器并保存文本文件 writer.Close(); // 释放资源 workbook.Dispose(); } }
读取结果:
使用C#代码将Excel文件读取到DataTable对象中
DataTable是.NET Framework中表示数据表的对象。它用于在内存中存储和操作数据,并可以执行排序、筛选、修改和导出等操作。使用C#读取Excel文件数据并将其写入DataTable对象,可以方便进一步处理数据。以下是具体步骤:
- 导入所需的命名空间。
- 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
- 通过 Workbook.Worksheets[] 属性获取第一个工作表。
- 使用 Worksheet.ExportDataTable() 方法将工作表中的数据导出到一个 DataTable 对象中。
- 释放资源。
代码示例:
using Spire.Xls; using System.Data; namespace ExcelToAccess { class Program { static void Main(string[] args) { // 创建Workbook类的对象 Workbook workbook = new Workbook(); // 加载Excel文件 workbook.LoadFromFile("Sample.xlsx"); // 获取第一个工作表 Worksheet worksheet = workbook.Worksheets[0]; // 将工作表中的数据导出到一个DataTable对象 DataTable dataTable = worksheet.ExportDataTable(); workbook.Dispose(); } } }
C#代码读取Excel文件并插入到数据库中
这个示例展示了如何使用C#代码将Excel工作表数据写入Access数据库。这种方法还需要使用System.Data.OleDb命名空间。如果你使用的.NET Framework没有它,你可以通过在Package Management Console中输入以下代码来安装它:Install-Package System.Data.OleDb。
读取Excel文件并插入到数据库的步骤如下:
- 导入所需的命名空间。
- 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
- 通过 Workbook.Worksheets[] 属性获取第一个工作表。
- 通过访问 Worksheet.Name 属性,获取工作表名称作为表名。
- 通过使用 Worksheet.Rows[] 属性访问第一行的 CellRange 对象,将每个列的值存储在一个字符串数组中,作为列名。
- 使用 OleDbConnection 连接到Access数据库,指定连接字符串和数据库文件路径。
- 通过动态生成一个用于创建表的SQL查询字符串,包括表名、列名和数据类型,创建数据表。
- 使用 OleDbCommand 对象和 ExecuteNonQuery 方法执行创建表的查询。
- 通过遍历Excel工作表的每一行(从第二行开始),构造带有参数化查询的插入语句,将每一行的数据插入Access数据库表中。
- 关闭数据库连接并释放资源。
代码示例:
using Spire.Xls; using System.Data.OleDb; class Program { static void Main(string[] args) { // 设置Excel文件路径 string excelFilePath = "Sample.xlsx"; // 设置Access数据库文件路径 string accessDbFilePath = "Sample.accdb"; // 加载Excel文件 Workbook workbook = new Workbook(); workbook.LoadFromFile(excelFilePath); // 获取第一个工作表 Worksheet worksheet = workbook.Worksheets[0]; // 使用工作表名称作为表名 string tableName = worksheet.Name; // 获取第一行作为列名 CellRange headerRange = worksheet.Rows[0]; string[] columnNames = new string[headerRange.Columns.Length]; for (int i = 0; i < headerRange.Columns.Length; i++) { columnNames[i] = headerRange.Columns[i].Value.Replace(" ", "_"); } // 连接到Access数据库 string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessDbFilePath};Persist Security Info=False;"; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); // 创建表 string createTableQuery = $"CREATE TABLE [{tableName}] ({string.Join(", ", columnNames.Select(c => $"[{c}] Memo"))})"; using (OleDbCommand createTableCommand = new OleDbCommand(createTableQuery, connection)) { createTableCommand.ExecuteNonQuery(); } // 插入数据 string insertQuery = $"INSERT INTO [{tableName}] ({string.Join(", ", columnNames.Select(c => $"[{c}]"))}) VALUES ({string.Join(", ", columnNames.Select(c => $"@{c}"))})"; using (OleDbCommand insertCommand = new OleDbCommand(insertQuery, connection)) { foreach (CellRange row in worksheet.Rows.Cast().Skip(1)) { for (int i = 0; i < row.Columns.Length; i++) { insertCommand.Parameters.AddWithValue($"@{columnNames[i]}", row.Columns[i].Value); } insertCommand.ExecuteNonQuery(); insertCommand.Parameters.Clear(); } } connection.Close(); workbook.Dispose(); } } }
读取写入结果:
本文中介绍了如何使用 C# 来读取 Excel 文件并提取数据用于各种用途。通过利用 Spire.XLS for .NET 的强大功能,开发人员可以高效地处理 Excel 数据、将其导出为不同格式并增强数据驱动型应用程序。
以上就是C#实现读取Excel文件并将数据写入数据库和DataTable的详细内容,更多关于C#读取Excel的资料请关注脚本之家其它相关文章!