批量导入Excel表格到Sqlserver数据库方法

作 者:
朱坚 

作者简介:
朱坚,淮安市楚州区审计局

原文出处:
江苏审计

内容提要:


期刊代号:V3
分类名称:审计文摘
复印期号:2012 年 03 期

关 键 词:

字号:

      在财政同级审期间,因为农业科粮食直补数据、水稻良种补贴数据、水稻小麦保险数据采用电子表格形式记录,并且每个乡镇一个表格,而使综合分析、全面把握存在一定的难度,因而必须将这些数据导入到Sqlserver数据库中。而使用Sqlserver数据库的导入导出工具导入数据时,因为Excel数量较多,相当麻烦,而且由于默认数据转换方式的问题,会使一部分数字列变为Null值,导致导入失败。通过摸索研究,采用以下几个步骤做法可以提高工作效率。

      一、开启opendatasource选项。Opendatasource选项为了数据安全性考虑是默认关闭的,需要手工开启,可以在查询分析器内执行修改默认设置:

      exec sp_configure ′show advanced options′,1reconfigure

      exec sp_configure ′Ad Hoc Distributed Queries′,lreconfigure

      二、各个乡镇的Excel表格名称是有规律的,表格内的Sheet表名是一致的,所以可以结合批处理和Opendatasrouce工具,改变数据库默认数据转换方式,强制将所有EXCEL数据,都导入到数据库各自表中。具体步骤如下:

      1.所有表格都在D:\Income文件夹下,将所有Excel文件名输出到1.txt记事本中;

      2.文件名都按照“小麦保险赔款BXSDBX宋集乡_3208032300(2010_7).xls”方式命名,可以对其统一处理,使用相似的语句,将所有Excel表格导入到Sqlserver数据库中。利用For语句将所有导入语句批量生成到2.txt;

      3.使用Sqlcmd执行2.txt,便可以将所有数据导入到各自的乡镇表中;

      4.再删除生成的1.txt,2.txt中间文件;

      5.将以上所有代码写到txt记事本中,更改后缀为.bat,并双击执行,即可将上述所有步骤全部执行完毕。例如:导入.bat,内容为:

      @dir/b D:\Income>l.txt

      @for/F "delims=_ tokens=l,2,3*" %%i in(1.txt)do

      echo select * into[2010财政同级审]..%%k from Opendatasource(′Microsoft.Jet.OLEDB.4.0′,′Data Source= "d:\income\%% i_%%j_%%k_%%l.xls"; Extended properties=Excel 8.0; hdr=no; IMEX=1;'").[银行接口]>>2.txt

      @sqlcmd-E-i 2.txt

      @del/q 1.txt

      @del/q 2.txt

      @exit

      三、使用Union all语句将所有表数据导入到同一个表中,如:select*into[2010财政同级审]..汇总表from(select *from博里镇union all select*from车桥镇)。

      四、在导入后的数据,因为存在表头,使用hdr=no选项,所以列名为系统默认添加的F1,F2,F3等等,可以根据列内容更改列名。本次审计涉及到数据的列名较少,汇总后修改比较方便。若列名较多,可以删除某一表头内容,使其第一列作列名,而在导入时,修改hdr=yes,再将这一张表格作用union all的第一张表,便可以省去修改列名的麻烦。

      五、删除表中无中的表头信息。例如:delete from[2010同级审]..汇总表where身份证号码not like′3%′。

      至此,所有数据已经导入到Sqlserver数据库完毕,如果习惯使用AO进行审计工作,还可以将Sqlserver中的数据导入到AO中,这里不再细述。

相关文章: