VS2019中SSIS Excel Source清除ACE连接管理器IMEX=1设置的解决办法
解决VS2019中ACE引擎与SSIS的IMEX=1失效问题
一、确保IMEX=1设置不被清除的正确操作流程
- 先创建Excel连接管理器,不要马上关联Excel Source
- 取消勾选「第一行包含列名」,切换到「全部」选项卡,找到「Extended Properties」属性,手动编辑值:在原有内容末尾追加
;IMEX=1(注意前面的分号),比如原属性是Excel 12.0 Xml;HDR=NO,修改后为Excel 12.0 Xml;HDR=NO;IMEX=1 - 确认连接字符串修改完成后,再创建Excel Source并关联该连接管理器,此时IMEX设置不会被自动清除
二、调整ACE引擎的类型扫描行数
ACE默认扫描前8行推断列类型,即便开了IMEX=1,若前8行多数是数值型,仍会把字符串数据设为NULL。通过注册表修改强制扫描所有行:
- 32位系统:定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel,将TypeGuessRows的值改为0 - 64位系统:定位到
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\Excel,将TypeGuessRows的值改为0 - 改完注册表必须重启VS2019才会生效
三、用Schema.ini文件强制指定列类型
在Excel文件所在的目录里创建Schema.ini文件,明确指定每一列的类型为字符串,示例如下:
[YourExcelFile.xlsx] ColNameHeader=False Format=Delimited(,) Col1=Column1 Char(255) Col2=Column2 Char(255) ; 根据实际列数继续添加其他列的定义
ACE会严格按照这个配置读取列类型,不受文件内数据的影响
四、更稳定的替代方案:转CSV用Flat File Source读取
把Excel文件另存为CSV格式,用SSIS的Flat File Source读取,直接将所有列指定为字符串类型,彻底绕开ACE引擎的类型推断问题。这个方法不需要依赖ACE的各种设置,后续维护也不容易出问题
内容的提问来源于stack exchange,提问作者JamesB
相关产品推荐
相关产品推荐

