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

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.mzph.cn/news/635142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

终于懂了!医师资格证和医师执业证有啥区别

医师资格证和医师执业证的区别&#xff08;总结篇&#xff09; 1、发证单位不一样: 《医师资格证》是由国家卫生部统一发放的。 《医师执业证书》是你获得了医师资格证书后申请由当地卫生局发的。 2、意义不一样: 《医师资格证》属于医疗技术方面的认可&#xff0c;证明持证人具…

【Linux】信号量基于环形队列的生产消费模型

信号量 信号量的本质是一个计数器&#xff0c;可以用来衡量临界资源中资源数量多少 信号量的PV操作 P操作&#xff1a;申请信号量称为P操作&#xff0c;P操作的本质就是让计数器减1。 V操作&#xff1a;释放信号量称为V操作&#xff0c;V操作的本质就是让计数器加1 POSIX信号量…

[C#]winform部署官方yolov8-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-obb&#xff08;You Only Look Once version 8 with Oriented Bounding Boxes&#xff09;是一种先进的对象检测算法&#xff0c;它在传统的Yolov3和Yolov4基础上进行了优化&#xff0c;加…

尝试着在Stable Diffusion里边使用SadTalker进行数字人制作

首先需要标明的是&#xff0c;我这里是图片说话类型&#xff0c;而且是看了知识星球AI破局俱乐部大航海数字人手册进行操作的。写下这篇文章是防止我以后遗忘。 我使用的基础软件是Stable Diffusion&#xff0c;SadTalker是作为插件放进来的&#xff0c;需要注意的是这对自己的…

Maven(五)如何只打包项目某个模块及其依赖模块?

目录 一、背景二、解决方案三、补充3.1 提出疑问3.2 解答 一、背景 在 SpringCloud 微服务框架下&#xff0c;会存在多个模块。当我们需要对其中某一个服务打包的时候&#xff0c;需要将该服务依赖的模块一起打包更新&#xff0c;如果项目比较小的话我们可以直接将项目中的所有…

阿里云ECS使用docker搭建mysql服务

目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器&#xff08;设置端口映射、目录映射&#xff09; 1.确保正确安装好docker 安装教程&#xff1a; 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…

WebKit工程组织与结构随笔

1.WebKit结构 1.1 三个模块 概括地说&#xff0c;WebKit由主要由三个模块组成&#xff1a;JavaScriptCore、WebCore 和 WebKit。WebKit作为了整个项目的名称。 1). WebCore&#xff0c; 2). WebKit&#xff0c; 3). JavaScriptCore。 WebCore&#xff1a;排版引擎核心&…

【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…

ssh: connect to host github.com port 22: Connection refused

ssh: connect to host github.com port 22: Connection refused 问题现象 本文以Windows系统为例进行说明&#xff0c;在个人电脑上使用Git命令来操作GitHub上的项目&#xff0c;本来都很正常&#xff0c;突然某一天开始&#xff0c;会提示如下错误ssh: connect to host gith…

浪花 - 用户信息展示+更新

1. 用户登录获取登录凭证 已登录的用户才能获取个人信息发送 Aixos 请求登录 const user ref();onMounted(async () > {const res await myAxios.get(/user/current);if (res.code 0) {console.log("获取用户信息成功");user.value res.data;} else {consol…

美团跌破发行价,市值较巅峰蒸发80%!

大家好&#xff0c;我是程序员小灰。 说起美团的股票&#xff0c;不禁让我回想起一段往事。2019年初&#xff0c;当时我所在的公司摩拜科技被美团收购&#xff0c;因为自己有一些摩拜的期权&#xff0c;被收购后转换成了美团期权。 小灰很快做了行权&#xff0c;拿到了美团的股…

tx2开发板升级JetPack至最新

最近一个项目用到了tx2, 上面的jetpack太老了需要更新&#xff0c;很久没和开发板打交道了&#xff0c;记录一下。中间没怎么截图&#xff0c;所以可能文字居多。 准备工作 Ubuntu 18.04的机器&#xff0c;避免有坑&#xff0c;不要使用虚拟机&#xff0c;一定要是物理机&…

Android Studio安卓开发--ListView学习整理

ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内&#xff0c;同时屏幕上原有的数据则会滚动出屏幕。 1.ListView的简单用法 &#xff08;1&#xff09;activity_main.xml布局中加入ListView控件&#xff1a;&#xff08;先占满整个布局的空间&#xff09;…

AIGC - 视频生成模型的相关算法进展

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135688206 视频生成技术确实是一个很有潜力的颠覆性技术领域&#xff0c;可以作为企业创新梯队的重点关注方向&#xff0c;最近发展很快&#xff…

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…

Excel表格的快速动态扩展与删除行

实例需求&#xff1a;工作表中的表格&#xff08;ListObject&#xff09;名称为Table1&#xff0c;表格列数不确定&#xff0c;需要实现如下功能&#xff1a; 当用户完成最后一行最后一列输入之后&#xff08;如果该单元格为空&#xff0c;则视为输入未完成&#xff09;&#…

C++继承(万字详!!)

文章目录 继承的概念及定义继承的概念继承定义 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员复杂的菱形继承及菱形虚拟继承菱形继承菱形虚拟继承 继承的总结和反思笔试面试题 继承的概念及定义 继承的概念 继承(inheritance) 机制是面…

C++:类与结构体的对比

2024年1月18日 内容来自The Cherno:C系列 -------------------------------------------------------------------------------------------------------------------------------- C中关于class与struct&#xff0c;几乎没有区别&#xff0c;只有一个关于“可见度”的区别…

【PS】PS设计图欣赏、学习、借鉴

【PS】PS设计图欣赏、学习、借鉴 bilibili萌新PS学习计划&#xff1a;PS教程全套零基础教学视频&#xff08;全套81节全新版本&#xff09;

C++大学教程(第九版)5.25去除break语句 5.27去除cintinue语句

5.25题目 (去除break和continue)break和continue 语句遭到质疑的原因是它们的非结构化性。实际上,break和continue 语句总能用结构化的语句取代。请详述如何从程序的一条循环语中去除break语句&#xff0c;并用某种结构化的手段替代。提示:break 语句用于在循环体内离开一个循…