首页 > 解决方案 > SSIS Foreach 循环容器不循环通过 Excel 文件

问题描述

我的流程中的 Foreach 循环容器没有将新文件名推送到已建立的变量中。只要有符合条件的文件,它就会循环遍历该过程,我只需要文件名是动态的。

我创建了一个变量名,其中包含所需目录中第一个文件的完整文件路径。看起来像C:\Somepath\ExcelFile.xlsx 我还创建了一个变量名 ExtProperties 以在 ConnectionString 中使用,其值为"Excel 12.0;HDR=Yes"

Excel 文件名

Foreach 循环容器具有以下设置:

收藏

  1. 枚举器设置为 Foreach 文件枚举器
  2. 文件夹是我的文件的目录位置
  3. 文件当前设置为 *.xlsx
  4. 检索文件名设置为完全限定

变量映射

我之前提到的 ExcelFileName 变量已设置为索引 0

我创建了一个指向具有以下相关属性的初始文件的 Excel 连接管理器:

Excel 连接管理器

  1. 延迟验证:真
  2. 表达式:我尝试将 设置ExcelFilePath为 ExcelFileName 变量并将以下内容用于 ConnectionString:

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +  @[User::ExcelFileName]   + ";Extended Properties=\"" +  @[User::ExtProperties] + "\""
    

现在它只使用ConnectionString。

  1. 保持相同的连接:假

数据流使用 excel 连接管理器使用 excel 源。数据流的目的是从每个excel文件中提取记录数,获取文件名和执行加载的用户,并将信息推送到数据库中。然而,当推送到数据库时,文件名和记录计数始终是第一个使用的文件,与满足条件的文件数量相同的次数。

数据流

我没有收到错误消息或警告。我在我的控制流中使用了以下脚本来查看变量的值是否一直在变化,但是弹出的消息框显示我仍然得到初始值。

控制流

MessageBox.Show(Dts.Variables["User::ExcelFile"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;

几天来我一直在阅读有关此问题的线程,这些是建议使用的设置,但这对我来说仍然是一个问题。任何帮助,将不胜感激。

标签: sql-serverexcelssisetlforeach-loop-container

解决方案


从第一张图片来看,您似乎已将变量 ExcelFileName 设置为表达式,因为表达式标记(fx)显示在变量图标上:

在此处输入图像描述

只需从变量中删除表达式并检查EvaluateAsExpression属性是否设置为False


推荐阅读