导入Excel遇到数字字母混合列,字母导入为空值发生数据丢失时,用以下方法解决!
2012-12-25 14:04
681 查看
使用Microsoft.Jet.OLEDB.4.0读取数据会出现当某一字段内分别含有文本和数字的混合数据时,某一类型的数据会产生丢失。
产生这种问题的根源与Excel ISAM[3](Indexed Sequential Access Method,即索引顺序存取方法)驱动程序的限制有关,Excel ISAM 驱动程序通过检查前几行中实际值确定一个 Excel 列的类型,然后选择能够代表其样本中大部分值的数据类型[4]。也即Excel ISAM查找某列前几行(默认情况下是8行),把占多的类型作为其处理类型。例如如果数字占多,那么其它含有字母等文本的数据项就会置空;相反如果文本居多,纯数字的数据项就会被置空。
现具体分析在第1节程序代码Extended Properties项中的HDR和IMEX所代表的含义。HDR用来设置是否将Excel表中第一行作为字段名,“YES”代表是,“NO”代表不是即也为数据内容;IMEX是用来告诉驱动程序使用Excel文件的模式,其值有0、1、2三种,分别代表导出、导入、混合模式。
当我们设置IMEX=1时将强制混合数据转换为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。
另一个改进的措施是IMEX=1与注册表值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的该注册表值来更改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。
如果还是不行,选取全文"设置单元格格式"为文本格式,这样就行了,亲测成功。
产生这种问题的根源与Excel ISAM[3](Indexed Sequential Access Method,即索引顺序存取方法)驱动程序的限制有关,Excel ISAM 驱动程序通过检查前几行中实际值确定一个 Excel 列的类型,然后选择能够代表其样本中大部分值的数据类型[4]。也即Excel ISAM查找某列前几行(默认情况下是8行),把占多的类型作为其处理类型。例如如果数字占多,那么其它含有字母等文本的数据项就会置空;相反如果文本居多,纯数字的数据项就会被置空。
现具体分析在第1节程序代码Extended Properties项中的HDR和IMEX所代表的含义。HDR用来设置是否将Excel表中第一行作为字段名,“YES”代表是,“NO”代表不是即也为数据内容;IMEX是用来告诉驱动程序使用Excel文件的模式,其值有0、1、2三种,分别代表导出、导入、混合模式。
当我们设置IMEX=1时将强制混合数据转换为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。
另一个改进的措施是IMEX=1与注册表值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的该注册表值来更改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。
如果还是不行,选取全文"设置单元格格式"为文本格式,这样就行了,亲测成功。
相关文章推荐
- 导入Excel遇到数字字母混合列,字母导入为空值发生数据丢失时,用以下方法解决!
- 导入Excel遇到数字字母混合列,字母导入为空值发生数据丢失
- C# 导入Excel遇到数字字母混合列数据丢失解决
- C#导入Excel遇到数字字母混合列数据丢失解决
- 快速导入EXCEL到SQL的SQL语句,此方法可以解决数字字母混合的问题
- 解决将excel数据导入sqlserver后数字格式不正确的问题的方法
- excel内容导入数据库数据丢失问题的分析几解决方法
- 利用OleDb导入Excel数据丢失问题及解决方法
- 使用OleDbConnection导入Excel混合数据列数据丢失分析与解决
- C#导出数据到CSV和EXCEL文件时数字文本被转义的解决方法
- 通过Navicat向MySQL导入Excel文件格式数据的方法及遇到的问题
- 将纯数字导入Excel时数据格式仍保持不变的方法
- Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
- php中导出数据到excel时数字变为科学计数的解决方法
- asp和php下textarea提交大量数据发生丢失的解决方法
- Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
- 解决R语言导入Excel数据以及计算机丢失jvm.dll问题
- Excel导入SQL Server数据丢失的解决办法
- 用数据库访问的方法解决从excel大量导入数据
- OLEDB方式读取Excel丢失数据的原因和解决方法