C#查插删改Excel,即对Excel的常规操作应用

  新的项目,新的内容:原本计划中使用的复杂数据库,连同其已经编好存储过程一起随着需求的改变,统统的不要了,虽然白忙一场,但也学到不少知识,特别是oralce存储过程的使用以及C#的调用。现在呢,将要采用Exlcel来代替数据库,进行数据的访问。

  言归正传,.Net要访问Excel有2个途径:

1、通过引用Office的接口访问:

using Microsoft.Office.Interop.Excel;

2、通过Ado.Net访问:

using System.Data.Odbc;

  现在就我项目中所要做的事情进行说明:首先要创建Excel,其次新建Sheet,然后给Excel文件创建第一行(相当于数据库的字段),接着要开始对Sheet的内容进行查插删改。其整个过程就是简化版的数据库的新建,表的新建,数据的查插删改等数据库基本操作。

  下面,按照这个流程,我来贴出我的测试代码,并解释:

  为了便于理解,我建立了下面的变量:

Microsoft.Office.Interop.Excel.Application app;
string DataFileDir = @"C:\WuxiZb";
string DataFilePath = @"C:\WuxiZb\SortPlan_Zb.xls";
string FilePassWord = "";

  我实验时,由于多次开启Excel 的Application,导致任务管理器中发现了N个名为Excel的进程,幸亏我发现了网上的这段代码,真的很重要,在程序初始化时执行:

Code

还有网上的这段资源的释放也是必备的:

Code

 以下记得在系统退出时执行:

//释放资源
app.Quit();
ReleaseCOM(app);

好,正式工程开始了:

首先创建新的工作表:

Code

其中,SaveAs的具体的参数说明,msdn一下吧,很详尽的。这个函数还能给工作表加密哦,不过,因为加了密码后无法odbc访问了,所以这里就是用空密码了。

好,“数据库”建完了,有了个空“表”了,下面我们需要自定义了“表”了:

 

Code

恩恩,就是这样,如果是像网上那样用Add来打开现有表的话,表名可是真的名字后面追加数字的,例如“测试1”,“测试2”,这样子,Save就是问题了。

下面我们再来看看这种模式下单元格的操作(相当于创建表列与初始的数据)

首先来看看删除“表”:

Code

下面可以修改单元格了:

 

Code

里面函数的参数请查阅msdn,我也是看那里看来得

下面问题产生了,如果要批量修改数据,这么做太慢了!

好吧,现在是ADO.Net出场的时候了:

不过呢由于Excel是没有主键的,所以CommandBuilder还是不要想了,语句自己来吧

Code

这样一来,大家可以看到:查询、插入、修改都OK了,但是删除失败了。那怎么办啊?如果只是把只update为null叫什么delete啊,而且造成n多的空白行!

其实,如果您仔细看我前面的代码,会发现,其实Delete在那里已经操作过了,对了就是这里:

range = sh.get_Range("A6""IV6");//选中一行,256个
range.Delete(XlDeleteShiftDirection.xlShiftUp);

现在,您所要做的就是用ADO找到sel到要删除的行号,然后如此删除整行即可,其中Delete的参数我选择了“下边的单元格向上移”。

ok,至此,“数据库”的新建;“表”的新建、删除;“数据”的查插删改,都可以了,怎么样,下面等着的就是实际应用了!

 最后附上我的测试电子表格的样子:

 给出例子的下载地址:http://download.csdn.net/source/1761945

 

 

posted @ 2009-10-22 20:07  臭臭的大佬  阅读(2272)  评论(7编辑  收藏  举报