由于项目需要,我们需要将大量的表格导入、导出到Excel,这个本来没有什么大不了的事情。但是,由于Excel的立足点是电子表格,而不是像 Access或者SQL-Server那样存储数据的,所以Excel里面的数据都是带有很浓重的格式,例如某行数据的格子的左上角有个小小的绿点,这个 是你输入单引号所致,用于表示该为一个字符串的,这个本来没有什么,但是如果同一个列里面既有小绿点,又没有小绿点,这就比较麻烦。还有Excel 的表头你可以设计得异常漂亮,例如冻结啊,彩色,双层,多层啊,带输入提示等等,但是这样做,导入的时候你会很郁闷的。
在网上看到了许多导入的方法,其中一种是把Excel 作为OleDB兼容的一种格式来读,常见的代码是:
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter oada = new OleDbDataAdapter ( "select * from [" + sheetname + "$]", strConn );
DataSet ds = new DataSet ();
oada.Fill ( ds );
return ds ;
但是,问题就来了,这种方法遇到的问题也是最多的。不知道是OleDb的局限,还是Excel本不适合用于存储数据,1700多条的时候,有时就会有数据丢失的情况,但是最麻烦的莫过于不是严格按照行列规格的存储数据的方式了,还有上面所提及的小绿点的问题。
今天我心血来潮,研究一下Excel对XML的支持情况,在百度搜索 Excel 和 XML ,果然还是有关于这方面的资料。
拿我现在实习所在单位的Excel作为例子:
首先是Excel表的结构,如下图:
如果使用OleDB方式导入,我们将要先将头部去掉只是剩下一行作为表头,去掉表尾那些空的值,这样才可以算基本合格,但是仅仅是基本,后面将会还有很多问题的。
好言归正传,看看怎么将这些数据进行整理成XML。
第一步:写好架构文件
如下图所示:
推荐大家使用XML编辑工具进行编写,细心的朋友也许留意到, element 标签就是表头了。
我们回到Excel进入下一步。
第二步,倒入XML的架构。
打开一个新的Excel文件,点击 数据 >> XML >> XML源
点击XML映射,弹出一个窗口,再点击" 添加" ,然后选取,刚刚写好的 架构文件.
再点击确定.
这样就把架构信息导入来了.
为了使Excel表好看点,我开始编辑Excel表了
第三步,编辑Excel文件
这步,很多朋友都比我厉害了.我这里偷懒,把原来的表头复制过来.
第四步,拖入XML架构.
点击" 岗位认证" 拖入到XML文档中,就可以看到如上图效果了.
现在会出现一个蓝色的方框,你要添加的数据就在这个蓝色方框里添加就可以了.
第五步,复制数据.
在原来的Excel表中复制所有的数据
在蓝色方框中点击右键,粘贴数据
第六步,导出XML
在蓝色方框中右键 >> XML >> 导出,选择好文件名就可以了
以下是导出的XML数据用IE打开的效果,以及用记事本打开的效果。
大家可以看到,已经没有了烦人的格式了,各种信息系统只需面对的是这种仅有数据的XML文件,编成难度大大降低,而且XML作为一种世界倡导的标准,很多编程的语言及平台都是支持,特别是Java 和 .net ,同样的道理信息系统只需要发布这种XML就可以了。
我将XML文件改改,改成只是剩下两行数据。
回到Excel,在蓝色区域中右键 >> XML>> 导入,就可以将XML的数据导入了.你也可以将那个XML架构那一行进行隐藏,看起来更加天衣无缝.
这样可以做到数据格式,两不误了.呵呵.
但是,同样使用这种方式能方便程序员的开发,但是对于已经用惯了Excel 的头头来说,要对每个Excel多做六步,也许是让他们最痛苦的事情了,呵呵.
但是我可以告诉大家,完成整个转换过程不足三分钟.