Excel导入数据混合问题

 

这两天搞薪酬的数据导入碰到混合数据问题, 如果前几行的数据格式为数字, 则文本格式的数据导入为空,后来找了半天也只有下面的结果:

Excel导入数据链接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source='test.xls'; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'

 

  • IMEX是驱动程序使用Excel文件的模式,其值有0、1、2三种,分别代表导出、导入、混合模式。当我们设置IMEX=1时将强制混合数据转 换为文本(偶刚开始以为这样就解决问题),但这种设置其实并不可靠,Excel默认其实只根据前8行来判断, 也就是说IMEX=1只有确保在某列前8行数据中至少有一个是文本项的时候才能起到作用,Excel只是把查找前8行数据中数据类型占优选择的 行为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。
  • 需要继续改进的办法是在设置IMEX=1以后还要对注册表值TypeGuessRows配合使用(web程序修改服务端),TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Jet\4.0\Engines\Excel”下的该注册表值来更改采样行数。
  • 不过其实还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得比较大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM的这种机制还是让1001的数据变成空。(偶根据实际情况设置为10000行,对效率的影响似乎不是很大

 

guowei2009-8-9 1:14:31

呵呵,高冰,我也遇到了这个问题哦!!我也就加了一个IMEX=1

TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”

这个跟Provider 和 office版本有关系吗?

访客: