SSIS包创建时运行正常但作业执行提示Sheet1$行集打开失败问题咨询
SSIS包本地运行正常、作业执行失败(仅原始Excel文件正常)的原因及解决方法
你遇到的报错如下:
Opening a rowset for "Sheet1$" failed. Check that the object exists in the database.
...returned validation status "VS_ISBROKEN".
已排除账号权限问题的前提下,故障原因可按以下优先级排查:
- Excel文件的受保护视图标记未解除
Windows会自动对存储在网络位置、来自其他设备的Office文件添加「阻止」安全属性,禁止非Office程序读取文件内容。原始文件A大概率已经提前手动解除过该属性,而另存为生成的文件B、C会默认携带该标记,SSIS的ACE驱动无法正常解析被阻止的文件,就会抛出找不到工作表的错误。
解决方法:右键点击异常Excel文件→选择「属性」→在「常规」选项卡底部勾选「解除锁定」→点击确定后重新运行作业即可。 - 工作表名称存在隐形差异
另存为操作可能会修改工作表名称的隐形字符(比如末尾多了空格、大小写变化),如果你的SSIS包连接管理器中是硬编码指定读取Sheet1$,实际文件中工作表名称和硬编码值不一致,就会触发行集打开失败。
解决方法:在SSIS的Excel连接管理器中重新选择对应异常文件的目标工作表,不要手动输入工作表名称,确认选择后重新部署包即可。 - SSIS包未开启延迟验证
SSIS默认在包正式执行前就会验证所有连接对象的可用性,作业执行时的服务上下文和本地运行不一致,若Excel连接初始化速度慢,或者触发了驱动的预检查逻辑,就会提前报VS_ISBROKEN错误,本地运行时因为上下文环境更宽松不会触发该问题。
解决方法:打开SSIS包,将Excel连接管理器的DelayValidation属性设置为True,同时将包本身的DelayValidation属性也设置为True,重新部署后运行作业。 - Excel文件格式与驱动预期不匹配
如果你另存为时选择了和原始文件A不同的Excel格式(比如原始是Excel 97-2003 .xls格式,另存为选了.xlsx格式,或者反过来),而SSIS连接管理器的驱动版本没有对应调整,也会出现读取失败。
解决方法:确认异常Excel文件的后缀和原始正常文件A完全一致,同时检查Excel连接管理器的连接字符串中Excel 12.0 Xml(对应.xlsx格式)、Excel 12.0(对应.xls格式)等参数和文件格式匹配。
内容的提问来源于stack exchange,提问作者JustAWanderer
相关产品推荐
相关产品推荐

