C#:使用OleDb从Excel表格中读取信息到DataTable

从Excel表格中将数据读入到DataTable数据类型中,我是通过使用OLEDB来实现的

(OLEDB是Object Linking and Embedding Database的缩写)

现有一个扩展名为xlsx的工作簿文件“节气表.xlsx”,在工作表Sheet1中有24个节气的信息

142512_Cpsn_1425762.png

本文中的示例程序(代码将在后面给出)读取这个数据表后的效果如下图:

142638_3LPM_1425762.png

可以看出:OleDb读入一个Excel工作表(Sheet)的数据后,工作表的第一行会变成标题,第二行起,逐行变为DataTable的一个数据行(Row)

示例程序控件说明:

143025_2B4V_1425762.png

程序代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ExcelReader
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            txtXlsxPath.Text = @"节气表.xlsx";
            txtSheetName.Text  = @"Sheet1";
        }

        /// <summary>
        /// 按钮:从EXCEL工作簿中读取信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRead_Click(object sender, EventArgs e)
        {
            dgvTable.DataSource = ReadFromExcel(txtXlsxPath.Text, txtSheetName.Text);
        }

        /// <summary>
        /// 从EXCEL工作簿中读取信息到DataTable(需要System.Data.OleDb)
        /// </summary>
        /// <param name="sXlsxPath">EXCEL工作簿文件地址</param>
        /// <param name="sSheetName">工作表名称</param>
        private DataTable ReadFromExcel(string sXlsxPath, string sSheetName)
        {
            string sExt = System.IO.Path.GetExtension(sXlsxPath);
            string sConn = "";
            if (sExt == ".xlsx") //Excel2007
            {
                sConn =
                     "Provider=Microsoft.ACE.OLEDB.12.0;" + 
                     "Data Source=" + sXlsxPath + ";" + 
                     "Extended Properties='Excel 12.0;HDR=YES'";
            }
            else if (sExt == ".xls") //Excel2003
            {
                sConn =
                    "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + sXlsxPath + ";" +
                    "Extended Properties=Excel 8.0";
            }
            else
            {
                throw new Exception("未知的文件类型");
            }
            OleDbConnection oledbConn = new OleDbConnection(sConn);
            oledbConn.Open();

            OleDbDataAdapter command = new OleDbDataAdapter(
                "SELECT * FROM [" + sSheetName + "$]", oledbConn);
            DataSet ds = new DataSet();
            command.Fill(ds, sSheetName);

            oledbConn.Close();
           
            return ds.Tables[sSheetName];
        }
    }
}

编写这个程序的时候遇到过两个异常,解决方法如下:

1)异常“外部表不是预期的格式”:

写连接表达式时(上面代码中的sConn),要对扩展名为.xlsx和.xls分类讨论

2)异常:“找不到可安装的ISAM”:

读取.xlsx格式的Excel表格时,连接表达式的Extended Properties部分,等于号后面的字符是用单引号括起来的,如果漏写单引号引起的,补上就好了

END

 

转载于:https://my.oschina.net/Tsybius2014/blog/346791

C# 把DataTable数据写入Excel文件的方法 使用C#把DataTable内数据写入Excel的方法收集。 一、使用OpenXml方式   //以下是由OpenXml方式把DataTable生成Excel的例子: public void ExportDataTable( DataTable table, string exportFile) { //create the empty spreadsheet template and sa 阅读详情

相关推荐

C# 窗体 将EXCEL文件存入datatable内,通过读取文本框数据存入数据表,然后再存入EXCEL内

///         /// 点击事件         ///         ///         ///         private void button1_Click(object sender, EventArgs e)         {             #region             //OleDbConnection objConn

u012546447的博客 1533

C# 利用 OleDb 组件操作 Excel 进行文件读写操作

OLEDB 组件是微软开发的用于连接 Excel 工作簿,将 Excel 文件作为数据源进行读写,在使用时与 SQL 几乎一样。 1 引入命名空间 using System.Data.OleDb; // 使用命名空间 2 查询操作 // 查询学生信息 private DataRowCollection findStudentById() { string id = textNumber.Text; // 查询语句,Sheet1 是工作簿中的表名,后面的$是语法要求,必须加上 string

华仔仔的博客 5549

【计算机组成原理实验】状态机实验

理解“状态机”概念,掌握“状态机”思想描述时序系统。通过下列三种基于D触发器的计数器结构,构建状态机的状态转移电路:环形计数器、扭环计数器和条件判断的扭环计数器。基于“状态机”原理,设计一个“交通灯”系统:控制红黄绿信号灯按照以下顺序循环点亮:“绿 黄 红 绿 ……”,红灯、绿灯和黄灯的亮灯持续时间可以通过拨码开关独立设置。红灯和绿灯是持续亮灯模式,黄灯则是闪烁亮灯模式。

Rover_jb的博客 1332

C# 两种方式实现Excel转DataTable

两种方式实现将Excel数据转DataTable,现成的东西看得懂,拿来用就行了: 1、读取Excel文件到DataSet中,再转DataTable就不用我说了吧,基础 /// <summary> /// 读取Excel文件到DataSet中 /// </summary> /// <param na...

肥嘟嘟左卫门 9722

智警杯1.4---excel可视化

知识点

lulu001128的博客 950

(10)Proteus 8.9上的STM32仿真系列(HAL)---freertos

实验设计:通过cubemxide生成freertos工程,然后创建一个 pc13 led灯间隔200ms闪烁的任务。非常遗憾的是proteus8.9仿真失败,实物上没有问题,但还是把流程过一遍。 一、原理图 实物是淘宝上stm32f103 c8t6的核心板,proteus上没有这个芯片,这里图上大概表示一下,用的是核心板自带的pc13引脚的led灯。 二、cubemxide配置 1.RCC如之前工程一样配置 2、配置SYS timebase Source不要使用systick,自己选择一个定时器,我这

qq_35442550的博客 7344

C#把excel数据转换成DataTable

private DataTable TurnExcelToDataTable(string path) { try { if (Path.GetExtension(path).Contains("xlsx"))//office版本2007及以上 { XSSFWorkbook hssfworkbook = nul...

一路向北 1451

MaxDEA如何计算超效率DEA

MaxDEA如何计算超效率DEA第一步,导入数据,设置输出和输出,点击OK;第二步,运行模型; 本文计算的是超效率DEA-BCC。 第一步,导入数据,设置输出和输出,点击OK; 第二步,运行模型; 在distance选项框中选择Radial:CCR(1978);BCC(1984)。 在Orientation中选择Non-oriented。其中,Input-oriented是投入最小;Outp...

王樰沫 1万+

C#读取excel数据到datatable

当使用C#语言连接Access数据库时,即使安装有64位版本的Office,也会出现“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。你是64位的Office,你就安装AccessDatabaseEngine_X64.exe。你是32位的Office,你就安装AccessDatabaseEngine.exe。1、安装“Microsoft Access 2010 数据库引擎可再发行程序包 ”//excel文件路径。//获得datatable。

u014705952的博客 787

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

这次实验利用logisim进行设计,进行了以下这四个实验,其中分为汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码,实验报告分为四个部分,在这四个部分中依次对四个实验的方案设计,设计思路进行了介绍

zhang2gongzi的博客 6万+

飞塔CVE-2022-40684复现

admin 无密码直接回车(会提示修改密码)

G3et的博客 1146

C#将Excel导入DataTable

如果 filename 不包含 ".xlsx",则判断 filename 是否包含 ".xls",如果是,就创建一个 HSSFWorkbook 对象 workbook,用于代表 Excel 工作簿。判断 filename 是否包含 ".xlsx",如果是,就创建一个 XSSFWorkbook 对象 workbook,用于代表 Excel 工作簿。我写这篇文章主要目的就是复习一下这个代码,加深我自己的理解,写的不对的地方,请各位不吝赐教,接下来让我们进入主题。如果找不到该名称对应的工作表,会返回 null。

m0_74323336的博客 2536

vue2 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue2,nuxt2,高德地图,热力图,绘制热力图层,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅代表,人流量,vue2使用高德地图实现某个区域热力图,vue高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue2中使用高德地图渲染热力图组件,高德地图使用热力图详细教

✅ 精选推荐文章 4201

【C#】C#使用OleDb读取Excel表格数据及遇到的问题

读取Excel表格数据的方法 /// <summary> /// 读取excel返回DataTable /// </summary> /// <param name="fileName"></param> /// <param name="sheetName"></param> /// <returns>&lt...

GreAmbWang的博客 2651

分布式计算Ray框架面试题及参考答案

动态任务图执行引擎是一种能够根据任务之间的依赖关系和运行时的实际情况,动态构建和执行任务图的系统。在 Ray 中,动态任务图执行引擎允许任务在运行时根据数据可用性、计算资源状态等因素,灵活地决定后续任务的执行顺序和方式。对于 AI 应用来说,其往往具有动态性的特点。例如,在深度学习模型的训练过程中,可能需要根据训练的结果动态调整下一轮训练的参数、数据增强方式或者模型结构。动态任务图执行引擎可以很好地支持这些动态需求。它能够根据 AI 应用中各个任务的实时输出和依赖关系,动态地生成和调整任务图。

大模型大数据攻城狮的专栏 1350

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# 使用 OleDb 读取Excel表格数据

首先需要先NuGet 包管理器中安装 System.Data.OleDb 类中引入需要用到的命名空间 上代码(连接字符串直接百度) string file_name = "test.xls";//文件路径,此处为了省事,直接把文件放到了bin->Debug->netcoreapp3.1文件夹下(demo是一个.Net Core的控制台项目) string conS...

一些随笔 1814

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C#读取Excel表格中数据并返回datatable

在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法。 DataTable GetDataTable(string tableName,string leftTopCel,string rightbutCel) { bool hasTitle = false; OpenFi

码农阿宇 5903

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# 读取csv、xls、xlsx表格(读取到datatable、sql查询语句读取)

在开发过程中我们经常会用到excel的操作,这篇文章来讲解读取excel表格, 导出的文章可以查看我另一篇博客https://blog.csdn.net/qq_39569480/article/details/104426928

你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 5385

C#中WinForm制作点击"选择文件"按钮选择Excel文件, 并读取Excel内容到DataTable

虽然我是一个PHPer,但项目有C#的需求,我也只能顶着头皮上了。 不过每一份付出都是收货,通过对C#的了解,更加的加深了我对PHP的熟悉程度,将来会另开一个系列单独讲解两个语言对比的文章。 这篇文章的代码,讲的是在WinForm中,制作一个"选择文件"按钮,可以选取Excel文件,并返回DataTable类型的Excel文件内容。 #region btnClick 点击"...

老刘Pro,PHPer 9945

C#读取excel数据到datatable中

C#读取excel数据到datatable中 1 DataTable dtGBPatient = new DataTable(); 2 3 string strConn;string excelName; 4 5 /...

622

C# Winform 选择Excel文件并读取内容

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threa...

Zero 3989

C# oleDb方法读取Excel文件

今天学习的是从FTP上下载Excel文件,DataTable接收数据之后,在DataTable中通过筛选,删减修改之后把数据插入到DB相应表中。 优点:读取方式简单、读取速度快 缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。 命名空间:using System.Data.OleDb; 另注:...

anko2011的博客 375

C# 读取Excel到DataTable两种方式对比

方式一 OLEDB读取 数据库引擎 优点:读取速度快,依据sheet排序读取 缺点:对于Excel版本依赖强,无法读取指定sheet 错误提示:本地计算机未指定Microsoft.ACE.OLEDB.12.0 解决方法:win7(64位)+office 2010(64位) 更改目标平台为X86 win10(64位)+office 2010(64位) 更改目标平台无效,下载安装Acce...

arvinzd的博客 2944

C# 读取Excel的几种常见方式及实现步骤

读取Excel的几种常见方式为:使用 Microsoft Office Interop Excel 库,使用 OLEDB 数据库连接方式,使用 EPPlus 库三种方式,在以上三种方法中,第一种和第二种方法需要安装额外的依赖库,并且性能较低;而第三种方法虽然需要引入 EPPlus 依赖库,但性能较高且使用方便。具体选择哪种方式可以根据自己的实际情况来考虑。

beenles的博客 1万+

C# OLEDB读取EXCEL

OLEDB需要从NGGET引入 using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using System.Text; using System.Data.OleDb; using System.Data; namespace ConsoleApp2 { ...

wan5363450的博客 399

C#读写EXCEL(OLEDB方式)

    用OLEDB方式读取EXCEL的速度是非常快的。但是当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。     OLEDB方式将Excel作为一个数据源,直接用Sql语句操作数据,并且不需要安装Office Excel就可以使用。但缺点是不能灵活操作Excel,例如设置字体,单元格格式等。一、读取Excel连接字符串的设置:读取“.xls”时使用"Provider...

漓涂 2万+
上一篇: MicrosoftExcel2013下的VBA宏:生成程序修改单
下一篇: Red Hat 上安装 CodeBlocks 笔记
chenzai1946
博客等级 码龄10年 41粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值