日期:2014-05-16  浏览次数:20404 次

SSIS Preview Excel数据显示NULL解决办法

最近在做Excel的解析,因为Excel都不标准,所以解析的时候出现了好多问题。其中一个问题是Excel数据有值,但是Preview的数据都为NULL。

 

原因是我的Excel数据出现在第9列,而Excel获得数据类型默认会扫描前8这可通过向连接字符串添加可选的MaxScanRows=设置,或在 DSN 配置对话框中更改要扫描的行数设置来完成。但是,由于 ODBC驱动程序中存在一个错误,所以目前指定“要扫描的行数”(MaxScanRows)设置不起作用。换句话说,Excel ODBC驱动程序(MDAC 2.1和更高版本)始终扫描指定数据源中的前 8行,以确定各列的数据类型。(http://support.microsoft.com/kb/257819/cn

 

这个问题可以通过修改注册表解决:

 

32版本:

将TypeGuessRows的值从8修改为1
Excel 97
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel
Excel 2000 以及之后版本
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

 

64位版本:

修改:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel

将TypeGuessRows的值从 8 修改为 0

 

注意:

1.       TypeGuessRows是一个全局设置选项,会对所有Excel生效,不单单影响SSIS,所以要测试修改的影响。

2.       修改TypeGuessRows会使Excel扫描所有行来决定数据类型,如果Excel数据量大的话可能会影响性能。

 

更多信息参考:

PRB: ExcelValues Returned as NULL Using DAO OpenRecordset:http://support.microsoft.com/kb/194124

BUG: Excel ODBC 驱动程序将忽略 FirstRowHasNames 或页眉设置:http://support.microsoft.com/kb/288343/cn