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文件的典型工作流程包括以下步骤:
- 使用 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 属性获取每个单元格的显示文本,然后将其写入文本文件中。
- 释放资源。
代码示例:
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文件读取到DataTable对象中
DataTable是.NET Framework中表示数据表的对象。它用于在内存中存储和操作数据,并可以执行排序、筛选、修改和导出等操作。使用C#读取Excel文件数据并将其写入DataTable对象,可以方便进一步处理数据。以下是具体步骤:
- 导入所需的命名空间。
- 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
- 通过 Workbook.Worksheets[] 属性获取第一个工作表。
- 使用 Worksheet.ExportDataTable() 方法将工作表中的数据导出到一个 DataTable 对象中。
- 释放资源。
代码示例:
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文件并插入到数据库的步骤如下:
- 导入所需的命名空间。
- 创建 Workbook 类的对象,并使用 Workbook.LoadFromFile() 方法加载Excel文件。
- 通过 Workbook.Worksheets[] 属性获取第一个工作表。
- 通过访问 Worksheet.Name 属性,获取工作表名称作为表名。
- 通过使用 Worksheet.Rows[] 属性访问第一行的 CellRange 对象,将每个列的值存储在一个字符串数组中,作为列名。
- 使用 OleDbConnection 连接到Access数据库,指定连接字符串和数据库文件路径。
- 通过动态生成一个用于创建表的SQL查询字符串,包括表名、列名和数据类型,创建数据表。
- 使用 OleDbCommand 对象和 ExecuteNonQuery 方法执行创建表的查询。
- 通过遍历Excel工作表的每一行(从第二行开始),构造带有参数化查询的插入语句,将每一行的数据插入Access数据库表中。
- 关闭数据库连接并释放资源。
代码示例:
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 文件并提取数据用于各种用途。通过利用 Spire.XLS for .NET 的强大功能,开发人员可以高效地处理 Excel 数据、将其导出为不同格式并增强数据驱动型应用程序。本文提供分步指导、代码示例和处理结果的图形展示。如果在使用中遇到任何问题,可通过Spire产品论坛获取技术支持。
相关文章:
C# .NET读取Excel文件并将数据导出到DataTable、数据库及文本
Excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。C#语言借助.NET Framework和各种库的广泛功能,能够进行高效的数据操作。利用C#读取Excel文件并将数据写入数据库和DataTable,或者将数据用于其他目的&…...
移动云助力智慧交通数智化升级
智慧交通是在整个交通运输领域充分利用物联网、空间感知、云计算、移动互联网等新一代信息技术,综合运用交通科学、系统方法、人工智能、知识挖掘等理论与工具,以全面感知、深度融合、主动服务、科学决策为目标,推动交通运输更安全、更高效、…...
【Vue技巧】vue 阻止a链接跳转事件的两种方法
ChatGPT4.0国内站点,支持设计稿转代码:https://www.atalk-ai.com/ 在Vue中,如果你想阻止<a>链接的默认跳转事件,你可以使用click.prevent或者click配合.prevent修饰符。这样做可以阻止链接的默认行为,即不会跳转…...
006.Oracle事务处理
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...
成功解决VScode进入到内置函数中调试
主要有两个关键步骤, 第一步 将launch.json中的"justMyCode"设为false 可通过使用ctrlshiftP搜索lauch.json找到次文件 如果找不到的话,可点击debug按钮,然后找到点击create a launch.json file创建 创建得到的launch.json如下&am…...
29、WEB攻防——通用漏洞SQL注入增删改查盲注延迟布尔报错
文章目录 盲注增删改查 盲注 概念:在注入过程中,获取的数据不能回显至前端页面,此时我们需要利用一些方法进行判断或尝试,这个过程被称为盲注。 解决:常规的联合查询注入不行的情况。 分类: 基于布尔的SQ…...
【设计模式 行为型】策略模式
它允许在运行时根据需要选择算法的行为。该模式通过将算法封装成独立的类,使得它们可以相互替换,而不影响使用算法的客户端代码。 策略模式主要包含以下角色: 环境(Context):环境对象持有一个策略对象的引…...
JVM:双亲委派机制类加载器
JVM:双亲委派机制 1. 例子2. 类加载器总结3. 类加载过程4. 双亲委派模型的执行流程:5. 双亲委派模型的好处 1. 例子 Java运行时环境有一个java.lang包,里面有一个ClassLoader类 我们自定义一个String类在java.lang包下,下面的…...
从入门到精通:ThinkPHP6异步请求的全面解析!
在ThinkPHP6中使用异步请求 在Web应用程序的开发中,经常会需要使用异步请求。异步请求能够在后台执行而不干扰页面的其他操作,提高了用户的体验。而在ThinkPHP6框架中,也提供了方便的异步请求方式,本文将详细介绍如何在ThinkPHP6…...
C++写csv文件
C写csv文件 其中有一个点需要注意,csv芬里尔之间要用逗号隔开 p_str_filename "D:\\1.csv"; int writelog(string p_str_filename, double p_double[]) {SYSTEMTIME timeCur;GetLocalTime(&timeCur);char t_logbuffer[1024] { 0 };sprintf(t_logbu…...
将Matlab图窗中的可视化保存为背景透明的矢量图
将matlab绘制的结果复制为矢量图时,去除背景的操作如下: 先打开/绘制图形窗口(不要关闭)在命令行终端输入axis off关闭坐标系继续在命令行终端分别输入: ax gca; copygraphics(ax,ContentType,vector,BackgroundColor,none); 此时ÿ…...
希尔(Shell)排序
文章目录 希尔排序的基本思想本质增量(间隔)的选取 希尔排序的时间复杂度希尔排序代码实现希尔排序的稳定性 希尔排序的基本思想 将要排序的序列按一定间隔(增量)分组,将每一组的数据按插入排序进行排序,再…...
【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案
Qt Creator 下载地址(含历史版本):https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1,安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料(Qt C…...
树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动
树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动 PreparationSynaptics APT RepositoryInstall evdiInstall displaylink-driver Preparation lsusb -d 17e9: sudo apt-get install dkmsSynaptics APT Repository wget https://www.synaptics.com/sites/default/files/Ubuntu/po…...
SpringBoot 实现 PDF 添加水印有哪些方案
SpringBoot 实现 PDF 添加水印有哪些方案 方式一:使用 Apache PDFBox 库方式二:使用 iText 库方式三:用 Ghostscript 命令行方式四:Free Spire.PDF for Java方式五:Aspose.PDF for Java 简介 PDF(Portable …...
【blender渲染】blender流体模拟基础
各位新年好哇,最近在做demo的时候,为了更好的效果,开始摸索一点离线渲染的东西。像这种后续渲染的处理,由于3ds max是更偏向于建模的dcc,有点不那么好使(没有说看不起vray的意思哈)。 像在实时…...
小白进阶之字符串处理
#include <cstdio> #include <cstring> int main() {char str[105];int count0,len0;scanf("%s",str);//输入字符lenstrlen(str);//求字符长for(int i0;i<len;i){if(str[i]A)//匹配计数count;}printf("%d",count); }#include <cstdio>…...
自定义Dubbo RPC通信协议
前言 Dubbo 协议层的核心SPI接口是org.apache.dubbo.rpc.Protocol,通过扩展该接口和围绕的相关接口,就可以让 Dubbo 使用我们自定义的协议来通信。默认的协议是 dubbo,本文提供一个 Grpc 协议的实现。 设计思路 Google 提供了 Java 的 Grpc…...
VB6.0报错:操作符AddressOf使用无效
VB调试,尝试调用DLL中的方法并带有回调函数,报错提示: 操作符AddressOf使用无效 代码: Private Sub btnScan_Click()... WCHBLEStartScanBLEDevices AddressOf callBackEnd Sub This function is called from the dll Public Fu…...
SpringCloud Aliba-Sentinel【中篇】-从入门到学废【5】
目录 1.流控规则 2. 熔断规则 3.热点规则 1.流控规则 1.资源名:唯一名称,默认请求路径 2.针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default (不区分来源) 3.阈值类型/单机阈值: QPS(每秒钟的请求数量&…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
