C#(或者.net)中操作excel的方式比较多,比如很笨的办法将excel转换为txt来操作,比如简单点的办法使用oledb,再比如使用插件xPorter Tools,虽然odbc也可以直接读,但是我还是系统oledb方式,odbc这里iubu讨论了。
文章讲记录oledb的连接方式与xPorter Tools的使用。oledb
oledb的操作excel非常方便,因为这种方式可以通过编写sql的方式来进行,因为网络上的教程比较多,所以我也就不再说明如何来使用oledb了。但是有一个比较让人头疼的问题那就是provider的问题。
32bit系统,比如windows XP中一般都自带了Microsoft.Jet.OLEDB.4.0驱动,所以现在网络上很大一部分的教程说明都是直接使用的连接字符串:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
这种方式如果你的程序恰好运行在win XP或者以下版本中,那么没什么问题,但是一旦运行在win7版本中,特别是64bit系统中,问题就来了,我查了下,好像网上很多人都说jet.oledb不支持x86,64bit系统中一般都使用ace12.0,所以字符串就要改改了:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 12.0;HDR=YES";
但是仍然有个问题,因为我个人的电脑上的系统是win7 home basic的,所以根本没找到ace 12.0,,我相信这个问题应该是个普遍问题。
如果你在编程的时候碰到这个问题,那么你的选择只有网上找找ace的驱动,或者换成我下面将要说明的内容。
- xPorter Tools
这个工具是一个第三方的插件,它需要你去下载,官方网站的地址是www.xporttools.net。另外注意的是xPorter Tools并不是一个插件,它是三个插件组合起来的,所以称为tools,三个插件分别为xPorter、xlReader、txtReader。它们的功能分别是写excel、读excel、读txt。
xPorter Tools下载之后需要注册,注册码是一次性的,而且是免费的,不知道以后会不会收费。获取注册码的方法如下图:
在mai的地方写上你的email地址,点击get installation key,然后去你的email中看看key是多少。记得安装xPorter Tools的时候,一定要能连接上wlan,否则你没办法注册的。还有一点,如果是win7的用户,那么你安装的时候,必须使用“管理员权限”来运行setup.exe这个文件,否则注册的时候会提示连接不上某个什么org的地址。
xPorter Tools用法:
ExcelConnection connection = new ExcelConnection(); connection.ConnectionString = @"Data Source =C:\Users\acer\Desktop\1.xls;HDR=no;Format=xls;"; ExcelCommand command = new ExcelCommand(); command.Connection = connection; command.CommandText = "aa"; ExcelDataAdapter ad = new ExcelDataAdapter(command); ad.Fill(dt);特别注意的是command我暂时还没有找到办法来直接使用connection来createCommand,因为ecelConnection.createcommand返回的是common.command,我不清楚能否显示转换为excelCommand,你可以试试。另外command.commandText这个里面不需要写select,因为我使用的是xlReader,xlReader本身就是专属的查询插件,所以comandText中就只需要写上tablename就好了,我举例的时候aa就是我第一个sheet的name,如果你要访问多张表格,我在网上看到的资料说是sheet1;sheet2;sheet3;..sheet4这样来写,虽然我没用过一次查多张表格。。
另外,附上我查过的资料地址,希望这几个只能能长期存在