无法在 SSIS 2017 中的 excel 连接管理器上使用表达式

Posted

技术标签:

【中文标题】无法在 SSIS 2017 中的 excel 连接管理器上使用表达式【英文标题】:Unable to use expression on excel connection manager in SSIS 2017 【发布时间】:2018-10-30 18:21:59 【问题描述】:

我正在尝试遍历目录中的 excel 文件并在 SSIS 中执行数据流任务。

For-Each 循环容器的设置似乎非常简单:

我映射到一个名为 FileNameTemp 的变量。

在 For-Each 循环中,我有一个数据流任务,其中源对象是带有 Excel 连接管理器的 Excel 源。我使用 FileName temp 来设置 ExcelFileName 的文件名:

我的问题是每当我尝试运行包时,我都会收到以下错误:

[连接管理器“Excel 连接管理器”] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码: 0x80004005。 OLE DB 记录可用。来源:“微软访问 数据库引擎”Hresult:0x80004005 描述:“创建失败 文件。”。

我发现了其他类似的帖子。我绝对有权写入此文件夹。如果我删除表达式并一遍又一遍地打开同一个文件,它就可以工作。我还在几乎所有级别上都将 DelayValidation 设置为 true。

【问题讨论】:

【参考方案1】:

尝试从表达式定义中删除“C:...”。 For-Each 文件枚举器将给出完整路径。

以后您可以在数据流任务上设置断点并查看您在本地选项卡中设置的变量的值。

【讨论】:

天哪,我不敢相信我错过了。【参考方案2】:

同样的答案,只是比@mike Baron 的答案更冗长的是,在 ForEach 循环容器中,单选按钮被检查为“完全合格”,结果被推送到我们的变量 @[User::FileNameTemp]

在指定的源文件夹 C:\SourceCode\ExcelSourceFinancialReconciliation 中找到的每个文件依次以

的形式分配给该变量 C:\SourceCode\ExcelSourceFinancialReconciliation\file1.txt C:\SourceCode\ExcelSourceFinancialReconciliation\file2.csv C:\SourceCode\ExcelSourceFinancialReconciliation\file2.xls

然后,当我们在 Excel 连接管理器 ExcelFilePath 属性上设置表达式时,我们只需要使用 @[User::FileNameTemp] 就目前而言,表达式将路径加倍,以便 Excel 尝试查找

C:\SourceCode\ExcelSourceFinancialReconcilliation\file1.txt\C:\SourceCode\ExcelSourceFinancialReconcilliation\file1.txt

作为一般规则,仅在与 SSIS 中的“对象”关联的表达式中使用直接变量。 Property1 = @Variable 这样做的原因是,您不能在评估上设置断点来确定为什么 @Property1 = "Foo" + @Variable 无效。如果创建自定义变量@Property1Variable = "Foo" + @Variable,然后分配@Property1 = @Property1Variable,则可以在包中放置断点,然后检查SSIS 变量的值。这种方式更容易发现问题。

可能对这个主题有帮助的其他答案

https://***.com/a/18640174/181965 https://***.com/a/21536893/181965

【讨论】:

以上是关于无法在 SSIS 2017 中的 excel 连接管理器上使用表达式的主要内容,如果未能解决你的问题,请参考以下文章

ssis excel源无法在设计时获取连接管理器

SSIS Excel 连接管理器无法连接到源

SSIS Excel 连接管理器:文件只能在选择了错误的 Excel 版本时才能读取

SSIS动态excel阅读

无法使用 SSIS 快速加载选项从 Excel 源加载 Netezza 中的数据

Excel 连接管理器的 SSIS 包问题