`
yuanlanxiaup
  • 浏览: 857742 次
文章分类
社区版块
存档分类
最新评论

读取Excel表格——Visual C#读取Excel和Access数据库

 
阅读更多

Visual C#读取ExcelAccess数据库

三峡大学土木水电学院 肖泽云

Content

一、读取Excel表格... 1

二、保存Excel文件... 5

三、获取表的名称... 6

四、打开指定的Excel表格... 8

五、读取Access数据库... 10

六、获取Access表信息... 12

七、打开指定的Access... 13

一、读取Excel表格

读取Excel表格数据主要有两种方式:第一种就是采用OleDb;第二种就是采用Application对象。采用第一种方式可以在用户不安装Excel的情况下读写Excel文件,后一种方式则要求在用户安装Office的情况下才能使用。

1OleDb方式

OLEDBOLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。它不仅可以连接Excel,还可以连接AccessSQL Server数据库等。使用OLEDB的应用程序会用到如下的请求序列:初始化OLE、连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE

具体过程如下:

1)首先,定义OleDbConnection对象用于OleDb连接数据库文件(Excel文件、Access文件等)。在其定义时就指定其连接数据库信息,如数据类型、文件路径等,如下:

对于连接Access

string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";";

对于连接Excel

string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0";

定义OleDbConnection对象如下:

OleDbConnection odcConnection = new OleDbConnection(strConn);

2)打开连接。前面已经定义了OleDbConnection对象,下面需要打开这个连接,如下:

odcConnection.Open();

3)建立SQL查询,即告诉连接查询数据库(文件)中的哪个表或符合要求的数据,如下:

OleDbCommand odCommand = odcConnection.CreateCommand();

添加查询命令,如下:

odCommand.CommandText = @"SELECT * FROM [sz_fcd$]";

其中,对于Excel中要获取某个表,则需要将表名用中括号括起并在尾部添加符号“$”,如上Excel文件中表名称为sz_fcd,此处要使用[sz_fcd$]。但是对于读取Access数据库就没有这个要求,直接使用表的名称即可。

4)执行查询,显示数据。使用OleDbDataReader对象读取查询的数据,定义如下:

OleDbDataReader odrReader = odCommand.ExecuteReader();

在此需要注意的是,OleDbDataReader对象的GetName(int i)方法获取的是第i列的名称,每次使用OleDbDataReader对象的Read()方法即表示读取下一行数据,OleDbDataReader对象的FieldCount属性表示数据的列数,一般情况下,第一次读取的为字段名称(未使用Read()方法之前)。使用OleDbDataReader对象[int i]则表示获取该行中第i列的数据,如odrReader[1],也可以使用名称,如odrReader[“NO”]

整个过程的程序代码如下所示:

private void 使用OleDb打开Excel_Click(object sender, EventArgs e)

{

OpenFileDialog openDG = new OpenFileDialog();

openDG.Title = "打开Excel表格";

openDG.Filter = "Excel表格(*.xls)|*.xls|CSV格式(*.csv)|*.csv|所有文件(*.*)|*.*";

openDG.ShowDialog();

string filename;

filename = openDG.FileName;

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filename + ";Extended Properties=Excel 8.0";

OleDbConnection odcConnection = new OleDbConnection(strCon);

odcConnection.Open();

OleDbCommand odCommand = odcConnection.CreateCommand();

odCommand.CommandText = "SELECT * FROM [sz_fcd$]";

OleDbDataReader odrReader = odCommand.ExecuteReader();

int size = odrReader.FieldCount;

dataGridView1.Rows.Clear();

//添加列的名称

for (int i = 0; i < size; i++)

{

dataGridView1.Columns.Add("", odrReader.GetName(i));

}

int j = 0;

while (odrReader.Read())

{

dataGridView1.Rows.Add();

for (int i = 0; i < size; i++)

{

dataGridView1.Rows[j].Cells[i].Value = odrReader[i].ToString();

}

j++;

}

}

2Application对象方式

在使用这种方式前,需要添加引用Microsoft Excel Object Library,如下图所示:

图片

使用Application对象方式操纵Excel主要是获取ExcelApplication对象,然后通过Workbook对象打开Excel文件,通过Worksheet对象获取Excel文件中的表。具体步骤如下:

1)首先定义Excel对象,如下:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

2)定义Workbook对象并打开文件,如下:

Microsoft.Office.Interop.Excel.Workbook myWorkBook;

excelApp.Workbooks.Open(filename, missingValue, missingValue, missingValue, missingValue, missingValue

, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue,missingValue, missingValue, missingValue);

myWorkBook = excelApp.Workbooks.get_Item(1);

其中有很多参数为missingValue,这些参数默认都可以不需要,定义其值为:

object missingValue = System.Reflection.Missing.Value;

3)获取工作表对象,如下:

Microsoft.Office.Interop.Excel.Worksheet newSheet;

newSheet=(Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Sheets[1];

其中,WorkBook对象的Sheets[Object index]方法为获取Excel文件中的第几个工作表。工作表Worksheet对象的name属性可以返回工作表的名称。

4)获取工作表中的数据,由于一个Excel工作表中的行数和列数有很多(共有65536行,256列),所以不可能获取所有的单元格,只能根据选择范围来获取,如指定获取个数等。另外,要获取某个单元格的值,不能直接使用Cells[i, j]来获取,要使用Range对象,如下:

Microsoft.Office.Interop.Excel.Range rng2 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[i + 1, j + 1];

整个过程程序代码如下:

private void 使用App打开Excel_Click(object sender, EventArgs e)

{

OpenFileDialog openDG = new OpenFileDialog();

openDG.Title = "打开Excel表格";

openDG.Filter = "Excel表格(*.xls)|*.xls|CSV格式(*.csv)|*.csv|所有文件(*.*)|*.*";

openDG.ShowDialog();

string filename;

filename = openDG.FileName;

object missingValue = System.Reflection.Missing.Value;

Microsoft.Office.Interop.Excel.Application excelApp

= new Microsoft.Office.Interop.Excel.ApplicationClass();

Microsoft.Office.Interop.Excel.Workbook myWorkBook;

excelApp.Workbooks.Open(filename, missingValue, missingValue, missingValue, missingValue, missingValue

, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);

myWorkBook = excelApp.Workbooks.get_Item(1);

Microsoft.Office.Interop.Excel.Worksheet newSheet;

newSheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Sheets[1];

dataGridView1.Columns.Clear();

int m = 1, n = 1;

Microsoft.Office.Interop.Excel.Range rng1;

while ((rng1 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[1, m]).Value2 != null)

{

dataGridView1.Columns.Add("", m.ToString());

m++;

}

m--;

while ((rng1 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[n, 1]).Value2 != null)

{

dataGridView1.Rows.Add();

n++;

}

n--;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < m; j++)

{

rng1 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[i + 1, j + 1];

dataGridView1.Rows[i].Cells[j].Value = rng1.Value2;

}

}

excelApp.Quit();

}

其中,通过While语句判断Excel工作表中的行数和列数。

分享到:
评论

相关推荐

    C# 连接access数据库实例

    自己的简单连接本地的access数据库的小程序,通过datagridview控件显示数据,并实现翻页的功能,编译测试过

    access数据库操作案例c#源码

    c# access数据库操作 链接,读取,插入

    C#实现ACCESS与EXCEL互相导入导出

    C#实现ACCESS数据库数据在EXCEL之间互相导入导出,把Access数据导出到Excel表格中。以DB1.MDB中的表“报名表”数据为例。运行是请拷贝DB1.MDB数据库到Bin/debug目录中, Framework 4.0框架。 运行环境:Visual ...

    winform实现excel导入数据库

    winform实现Excel导入数据库,visual studio2005 + access数据库

    Visual C# .NET精彩编程实例集锦

    实例119 如何读取EXCEL文件 实例120 如何取得聚合函数返回值 实例121 如何直接操作主从关系表 实例122 如何以Web方式查询Access数据库 实例123 如何使用列表视图显示数据库信息 实例124 如何显示和修改数据库中的...

    《Visual C# .NET精彩编程实例集锦》配套光盘文件【全】

    《Visual C# .NET精彩编程实例集锦》配套光盘文件【全】 目录回到顶部↑ 前言 第1章 控件操作 实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例...

    Visual C#.NET 2008程序设计案例集锦 (源码)

    案例4.3 读取并浏览Access数据库中的数据 案例4.4 利用控件连接SQL Server数据库 案例4.5 利用ADO.NET访问SQL Server数据库 案例4.6 连接Excel电子表格 案例4.7 利用SQL语句向数据库表中插入数据 案例4.8 利用...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows常用控件的使用、...

    轻松学C#(图解版)

    第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...

    显示动画光标(C#源代码编写)显示动画光标,当运行程序时,光标将变成动画光标

    显示动画光标(C#源代码编写)显示动画光标,当运行程序时,光标将变成动画光标 VisualStudio2008创建[DllImport("user32")] private static extern IntPtr SetCursor(IntPtr hCursor); [DllImport("user32")] ...

    课程设计,实训-基于C#的摇号抽奖系统.zip

    1、开发环境为Visual Studio 2010,数据库为access,数据库文件在Debug文件夹中,使用.net 4.0开发。 2、默认保存抽奖号码的txt文件在Debug文件夹里面。 3、该源码功能比较简单,比较适合学习交流使用,感兴趣的...

    VS2010单元测试工具使用

    目录: 1、建立单元测试项目 2 1.1、从被测试代码生成单元测试 2 1.2、添加单元测试项目 7 2、编写测试方法 7 3、数据驱动的单元测试 8 ...3.2、读取Excel的方法: 11 4、单元测试的运行 14 5、附加测试属性 15

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    ASP升级.net资料大全(c#入门 语言规范 源码教程 学习笔记 技术资料 面试题 asp与.net代码生成器)

    ACCESS数据库操作类.txt ASP.NET常用代码.txt asp.net常用函数表.txt Asp.net的身份验证.txt ASP导出Excel数据的四种方法.txt C#调用存储过程.txt CheckBox控件.txt datagrid排序_选择_分页.txt DataSet...

    C#微软培训资料

    1.1 Microsoft.NET——一场新的革命.4 1.2 .NET 与 C#.6 1.3 C#语言的特点.8 1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 ...

    .net技术资料大全(语言规范 源码教程 学习笔记 技术资料 .net代码生成器)

    ACCESS数据库操作类.txt ASP.NET常用代码.txt asp.net常用函数表.txt Asp.net的身份验证.txt ASP导出Excel数据的四种方法.txt C#调用存储过程.txt CheckBox控件.txt datagrid排序_选择_分页.txt DataSet...

Global site tag (gtag.js) - Google Analytics