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

问题描述 投票:4回答:2

我的进程中的Foreach循环容器没有将新文件名推送到已建立的变量中。它遍历整个过程的次数与满足条件的文件一样多,我只需要文件名是动态的。

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

ExcelFileName

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

Collection

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

Variable Mappings

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

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

Excel connection manager

  1. DelayValidation:True
  2. 表达式:我已经尝试将ExcelFilePath设置为ExcelFileName变量并将以下内容用于ConnectionString: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::ExcelFileName] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""

现在它只使用ConnectionString。

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

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

data flow

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

control flow

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

我已经阅读了几天的线程,这些是建议工作的设置,但这对我来说仍然是一个问题。任何帮助,将不胜感激。

sql-server excel ssis visual-studio-2017 foreach-loop-container
2个回答
3
投票

从第一个图像开始,看起来您已将Variable ExcelFileName设置为要求为Expression,因为表达式mark(fx)显示在变量图标上:

enter image description here

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.