SSIS Foreach循环容器不循环通过Excel文件

时间:2019-03-26 20:19:00

标签: sql-server excel ssis visual-studio-2017 foreach-loop-container

我的过程中的Foreach循环容器没有将新文件名推送到已建立的变量中。循环遍历该过程的次数是有多少个符合条件的文件,我只需要文件名是动态的即可。

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

ExcelFileName

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

Collection

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

Variable Mappings

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

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

Excel connection manager

  1. DelayValidation:正确
  2. 表达式:我都尝试将ExcelFilePath设置为 ExcelFileName变量,并将以下内容用于 ConnectionString:

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

现在它仅使用ConnectionString。

  1. 保持相同的连接:错误

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

data flow

我没有收到任何错误消息或警告。我在控制流中使用了以下脚本来查看变量的值是否已更改,但是弹出的消息框显示我仍然可以获取初始值。

control flow

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

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

2 个答案:

答案 0 :(得分:3)

从第一张图片开始,您似乎已将变量ExcelFileName设置为要评估为表达式,因为在变量图标上显示了表达式标记(fx)

enter image description here

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

答案 1 :(得分:0)

在foreach循环编辑器中,选择名称和扩展名代替或完全限定。 并检查遍历子文件夹(如果有子文件夹)。