博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#:使用OleDb从Excel表格中读取信息到DataTable
阅读量:5746 次
发布时间:2019-06-18

本文共 2618 字,大约阅读时间需要 8 分钟。

hot3.png

从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";        }        ///         /// 按钮:从EXCEL工作簿中读取信息        ///         ///         ///         private void btnRead_Click(object sender, EventArgs e)        {            dgvTable.DataSource = ReadFromExcel(txtXlsxPath.Text, txtSheetName.Text);        }        ///         /// 从EXCEL工作簿中读取信息到DataTable(需要System.Data.OleDb)        ///         /// EXCEL工作簿文件地址        /// 工作表名称        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

你可能感兴趣的文章
Spring DATA JPA嵌套子查询
查看>>
build webrtc for android
查看>>
Oracle 索引 详解
查看>>
spring的service类调用自己方法事务无效
查看>>
CentOS “Destination Host Unreachable”问题解决办法
查看>>
java的反射机制浅谈
查看>>
CentOS7中rpm安装MySQL数据库
查看>>
架构师之路(一)-什么是软件架构
查看>>
JAVA中的ThreadLocal
查看>>
oracle子查询 in exists
查看>>
常用JavaScript Function
查看>>
半自动化ORM框架mybatis
查看>>
Python2.x与3.x版本区别
查看>>
ubuntu使用apt-get默认安装ElasticSearch里JAVA环境丢失的问题
查看>>
最少硬币找零问题
查看>>
spring boot 整合mybatis分页插件pagehelper5.1
查看>>
看《曾国藩》从纳小妾到见容闳一节笔记二三
查看>>
Web安全之CSRF攻击
查看>>
正则表达式简明教程(持续更新中)
查看>>
孤单的平安夜
查看>>