C# .NET读取Excel文件并将数据导出到DataTable、数据库及文本

news/2024/11/26 4:54:36/

Excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。C#语言借助.NET Framework和各种库的广泛功能,能够进行高效的数据操作。利用C#读取Excel文件并将数据写入数据库和DataTable,或者将数据用于其他目的,对于开发人员来说是一个处理Excel数据的优秀解决方案。
本文主要介绍如何使用 C# 来读取 Excel 文件,包括以下部分:

文章目录

    • 使用C#读取Excel文件引导
    • C#代码读取Excel文件数据并写入文本
    • 使用C#代码将Excel文件读取到DataTable对象中
    • C#代码读取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文件的典型工作流程包括以下步骤:

  1. 使用 Workbook.LoadFromFile() 方法加载Excel文件。
  2. 通过 Workbook.Worksheets[] 属性访问工作表。
  3. 通过 Worksheet.Range[] 属性访问单元格。
  4. 通过 CellRange.Text 属性访问单元格中显示的文本,或通过 CellRange.Value 属性访问单元格的值(文本、数字、公式等)。
  5. 检索数据,将数据写入文本文件、数据库等,或执行其他所需操作。
  6. 可以直接使用 Worksheet.ExportDataTable() 方法将单元格值导出到数据表,并返回一个DataTable对象。
  7. 还可以直接使用 Workbook.SaveToFile() 方法将工作簿转换为任何支持的格式。

C#代码读取Excel文件数据并写入文本

使用C#读取Excel文件并将数据写入文本文件的步骤如下:

  1. 导入所需的命名空间。
  2. 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
  3. 通过 Workbook.Worksheets[] 属性获取第一个工作表。
  4. 创建一个文本文件用于写入工作表中的数据。
  5. 遍历分配的行和列,在 Worksheet.Range[] 属性中访问单元格,并通过 CellRange.Text 属性获取每个单元格的显示文本,然后将其写入文本文件中。
  6. 释放资源。
    代码示例:
    C#
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数据保存为文本

使用C#代码将Excel文件读取到DataTable对象中

DataTable是.NET Framework中表示数据表的对象。它用于在内存中存储和操作数据,并可以执行排序、筛选、修改和导出等操作。使用C#读取Excel文件数据并将其写入DataTable对象,可以方便进一步处理数据。以下是具体步骤:

  1. 导入所需的命名空间。
  2. 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
  3. 通过 Workbook.Worksheets[] 属性获取第一个工作表。
  4. 使用 Worksheet.ExportDataTable() 方法将工作表中的数据导出到一个 DataTable 对象中。
  5. 释放资源。

代码示例:
C#

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文件并插入到数据库的步骤如下:

  1. 导入所需的命名空间。
  2. 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
  3. 通过 Workbook.Worksheets[] 属性获取第一个工作表。
  4. 通过访问 Worksheet.Name 属性,获取工作表名称作为表名。
  5. 通过使用 Worksheet.Rows[] 属性访问第一行的 CellRange 对象,将每个列的值存储在一个字符串数组中,作为列名。
  6. 使用 OleDbConnection 连接到Access数据库,指定连接字符串和数据库文件路径。
  7. 通过动态生成一个用于创建表的SQL查询字符串,包括表名、列名和数据类型,创建数据表。
  8. 使用 OleDbCommand 对象和 ExecuteNonQuery 方法执行创建表的查询。
  9. 通过遍历Excel工作表的每一行(从第二行开始),构造带有参数化查询的插入语句,将每一行的数据插入Access数据库表中。
  10. 关闭数据库连接并释放资源。

代码示例:
C#

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数据并写入数据库

本文中介绍了如何使用 C# 来读取 Excel 文件并提取数据用于各种用途。通过利用 Spire.XLS for .NET 的强大功能,开发人员可以高效地处理 Excel 数据、将其导出为不同格式并增强数据驱动型应用程序。本文提供分步指导、代码示例和处理结果的图形展示。如果在使用中遇到任何问题,可通过Spire产品论坛获取技术支持。


http://www.ppmy.cn/news/1326172.html

相关文章

TestCaseAssiant使用说明

目录 说明 工具界面 功能描述 Xmind转测试用例 测试组件 测试用例 用例优先级 用例前提 用例操作步骤 用例期望结果 Excel测试用例转Testlink xml 用例模板 使用技巧: TestLink Xml转Excel测试用例 说明 本文为小编之前博文中介绍的工具使用说明 Xmind转Excel测…

按照要求完成如下DQL语句编写

题目来源于黑马MySQL 创建表格&#xff1a; CREATE TABLE TB_EMPLOYEE(ID INT COMMENT 编号,WORK_NO VARCHAR(10) COMMENT 工号,NAME VARCHAR(10) COMMENT 姓名,GENDER CHAR COMMENT 性别,AGE TINYINT UNSIGNED COMMENT 年龄,ID_CARD CHAR(18) COMMENT 身…

jdk下载与安装

工欲善其事必先利其器&#xff0c;当然学习java也需要先做好学习的准备条件 jdk的下载与安装 1、安装步骤 随着sun公司被甲骨文收购&#xff0c;目前下载jdk需要到oracle官网进行下载 官网地址&#xff1a;https://www.oracle.com/java/technologies/downloads/选择适合自己…

Unity中URP下获取主灯信息

文章目录 前言一、计算BulinnPhone的函数有两个重载1、 目前最新使用的是该方法&#xff08;这是我们之后主要分析的函数&#xff09;2、 被淘汰的老方法&#xff0c;需要传入一堆数据 二、GetMainLight1、Light结构体2、GetMainLight具有4个方法重载3、1号重载干了什么&#x…

Unity中URP下的SimpleLit片元着色器

文章目录 前言一、SimpleLit片元着色器大体框架1、传入 和 返回2、GPU实例化部分3、准备 BlinnPhong 光照模型计算需要的 SurfaceData4、准备 BlinnPhong 光照模型计算需要的 InputData5、进行 BlinnPhong 的计算、雾效颜色混合及透明度计算 二、准备SurfaceData1、SurfaceData…

win系统环境搭建(十三)——Windows系统的docker设置阿里源

windows环境搭建专栏&#x1f517;点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆&#xff0c;所以外网的访问总是那么慢又困难&#xff0c;用docker拉取几兆的小镜象还能忍受&#xff…

RockerMQ发送消息流程

引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.1</version></dependency> 1. 定义RocketMQTemplateService工具类 Service public clas…

ChatGPT给出的前端面试考点(html+css+JS)

ChatGPT给出的前端面试考点&#xff08;htmlcssJS&#xff09; HTML HTML是什么&#xff0c;它的主要作用是什么&#xff1f; 什么是DOCTYPE&#xff0c;为什么在HTML文档中使用它&#xff1f; HTML5相对于之前的HTML版本有哪些主要的新特性&#xff1f; 解释语义化HTML的概…