在.NET开发中,不管是web程序还是桌面软件(尤其是涉及数据库操作的MIS系统等),常常需操作Excel,如导出数据到Excel,读取Excel中数据到程序中等。总结起来,其操作不外乎创建、打开、读写、保存(后退出/释放),而其操作方法,则主要有:通过ADO.NET数据连接方式通过Excel对象模型“自动化”操作使用中间数据格式如文本文件,XML等间接操作Excel使用第三方控件(主要用于向Excel传输数据)等。

在开始讨论之前,先把相关的一些网上资源罗列一下,其中大部分来自MSDN:

MSDN: 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
http://support.microsoft.com/kb/306023/zh-cn

MSDN: 从 .NET 开发人员的角度理解 Excel 对象模型 
http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx

如何:使用 COM Interop 创建 Excel 电子表格(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/ms173186(VS.80).aspx

Office XP 主互操作程序集入门
http://msdn.microsoft.com/zh-cn/library/aa201322(office.11).aspx

如何通过 Visual C# 使 Excel 自动执行操作以使用数组来填充或获取某区域中的数据
http://support.microsoft.com/kb/302096/zh-cn

如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
http://support.microsoft.com/kb/302084/zh-cn

如何使用 Visual C# .NET 处理 Excel 事件
http://support.microsoft.com/kb/823981/zh-cn

C#中创建、打开、读取、写入、保存Excel的一般性代码
http://hi.baidu.com/zhaochenbo/blog/item/f6d70ff7bf32fa2a730eec39.html

如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
http://support.microsoft.com/kb/306572/zh-cn

在 Visual C#.NET 中使用 GetOleDbSchemaTable 从 Excel 如何: 检索元数据
http://support.microsoft.com/kb/318452/zh-cn

与 XML 一起使用 Visual Basic 和 ASP 生成 Excel 2003 工作簿
http://msdn.microsoft.com/zh-cn/library/aa203722(office.11).aspx

下面开始就各种方法逐步说明其具体的Excel操作过程:

1.通过ADO.NET数据库连接方式

Microsoft Jet 提供程序用于连接到 Excel 工作簿。在以下连接字符串中,Extended Properties 关键字设置 Excel 特定的属性。“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""

注意,Extended Properties 所需的双引号必须还要加双引号。

使用ADO.NET打开、读取并关闭代码示例如下:

using System.Data.OleDb;
using System.Data; String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet objDataset1 = new DataSet();
//将Excel中数据填充到数据集
objAdapter1.Fill(objDataset1, "XLData");
objConn.Close();

从上面可以看出,使用ADO.NET可将Excel当作普通数据库,使用SQL语句来操作。

通过ADO.NET获取Excel文件的各Sheet名称,可使用元数据方式:

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
cn.Open();
DataTable tb = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataRow row in tb.Rows)
{
//遍历弹出各Sheet的名称
MessageBox.Show(row["TABLE_NAME"]);
}

关于使用ADO.NET创建并写入Excel文件与普通数据库操作极为类似,参见以下代码:

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
string sqlCreate = "CREATE TABLE TestSheet ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
//创建Excel文件:C:/test.xls
cn.Open();
//创建TestSheet工作表
cmd.ExecuteNonQuery();
//添加数据
cmd.CommandText = "INSERT INTO TestSheet VALUES(1,'elmer','password')";
cmd.ExecuteNonQuery();
//关闭连接
cn.Close();

关于SQL语句中用到的数据类型,请查看System.Data.OleDb.OleDbType 枚举。

至此,使用ADO.NET打开、创建、读取、写入、保存并退出已全部实现,总结起来,与数据库操作基本无异,很简单。这种方式的好处就是通用性强,将Excel中内容看作数据表,读取操作简单可靠,适合内容规范的Excel表格的数据读取。缺点是当Excel结构复杂,如含合并单元等时,无法正确读取,甚至出现不可预知的异常。

2.通过Excel对象模型的“自动化”操作

3.通过中间数据格式间接操作

4.使用第三方控件

C#操作Excel(创建、打开、读写、保存)几种方法的总结的更多相关文章

  1. 【转载】C# winform操作excel(打开、内嵌)

    本文转载自静待"花落<C# winform操作excel(打开.内嵌)>   说明:显示的excel是利用模板创建的 using System;using System.Coll ...

  2. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  3. Java 8创建Stream流的5种方法

    不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...

  4. (转)C#调用默认浏览器打开网页的几种方法

    转载,原文地址:http://blog.csdn.net/testcs_dn/article/details/42246969 CSharp调用默认浏览器打开网页的几种方法 示例界面: 方法一:从注册 ...

  5. Openerp 中打开 URL 的三种 方法

    来自:http://shine-it.net/index.php/topic,8013.0.html 最近总结了,Openerp 中打开 URL 的三种 方法: 一.在form view 添加 < ...

  6. 使用express创建node服务器的两种方法及区别

    使用express创建node服务器有两种方法,如下所示: 方法一: var express = require('express'); var app = express(); app.listen ...

  7. 使用urllib2打开网页的三种方法(Python2)

    python2才有urllib2模块,python3把urllib和urllib2封装成了urllib模块 使用urllib2打开网页的三种方法 #coding:utf-8 import urllib ...

  8. ajax返回json在 IE下,提示打开或保存的解决方法

    Content-type要设置成 text/html 我是用的mvc jquery.form.js 提交的表单. 返回json响应数据. 结果在ie下提示打开或保存,查看保存的内容.就是我返回的jso ...

  9. Windows下自由创建.htaccess文件的N种方法

    .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控 制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态 ...

随机推荐

  1. jdk5新特性

    前两天看到jdk10试用版都出来了,才发现自己连1.8都没用过,对不同版本的jdk的新特性也不是太了解,所以想还是百度一下看看人家怎么说然后自己记录总结一下,其中jdk1.8的新特性可以到edu.51 ...

  2. 一个js程序:离下一个圣诞节还有多少天?

    话不多说上代码: //离下一个圣诞节还有多少天 var christ=new Date(); christ.setMonth(11); christ.setDate(25); var year=now ...

  3. Unified shader model

    https://en.wikipedia.org/wiki/Unified_shader_model In the field of 3D computer graphics, the Unified ...

  4. MPP、SMP、NUMA概念介绍

    一.MPP,SMP,NUMA概念介绍 1.1.       MPP架构介绍 MPP (Massively Parallel Processing),大规模并行处理系统,这样的系统是由许多松耦合的处理单 ...

  5. 神经网络中embedding层作用——本质就是word2vec,数据降维,同时可以很方便计算同义词(各个word之间的距离),底层实现是2-gram(词频)+神经网络

    Embedding tflearn.layers.embedding_ops.embedding (incoming, input_dim, output_dim, validate_indices= ...

  6. python处理分隔大文件

    4个.sql格式的文件,2G大小,直接插入mysql数据中,文件太大了,导入不进去. 太大的文件用python处理也很麻烦,处理不了,只能先分隔成小文件处理. 文件中数据格式:其中values里面的数 ...

  7. python 形参

    def fun(x="dx",y="dy"): print "fun------" print x print y fun()fun(&qu ...

  8. Linux就业技术指导(七):游戏类运维重点流程解析

    一,某游戏公司例行上线与更新流程示例 例行维护/更新流程 1.1 更新前天 提前确认好要更新的是什么,更新会有人通知你,一般是运营人员 比如:我们明天做什么什么更新 1.2 第2天更新 一般固定点更新 ...

  9. vue 实例生命周期

    compile template into render function 编译模板渲染方法 compile el’s ouoterHtml as template 将el的outerHTML当做模板 ...

  10. 如何使用eclipse搭建maven环境以及常见的错误

    这篇博客适合零基础学习maven,搭建maven以及运行项目,常见的错误,我会在结尾写出说明白,看是否和大家的错误一样,或者文章的括号注释部分也会写出一些注意点. 第一步:就是下载maven,以及配置 ...