SSIS Foreach 循环容器不循环 Excel 个文件
SSIS Foreach Loop Container Not Looping through Excel Files
我进程中的 Foreach 循环容器没有将新文件名推送到已建立的变量中。它循环遍历该过程的次数与满足条件的文件一样多,我只需要文件名是动态的。
我创建了一个变量名称,其中包含我所需目录中第一个文件的完整文件路径。看起来像 C:\Somepath\ExcelFile.xlsx
我还创建了一个变量名 ExtProperties 以在 ConnectionString 中使用,其值为 "Excel 12.0;HDR=Yes"
Foreach 循环容器具有以下设置:
:
- 枚举器设置为 Foreach 文件枚举器
- 文件夹是我的文件的目录位置
- 文件当前设置为 *.xlsx
- 检索文件名设置为完全限定
我之前提到的 ExcelFileName 变量已设置为索引 0
我创建了一个 Excel 连接管理器,指向具有以下相关属性的初始文件:
- 延迟验证:真
表达式:我已经尝试将 ExcelFilePath
设置为
ExcelFileName 变量并使用以下内容
连接字符串:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::ExcelFileName] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""
现在它只使用 ConnectionString。
- 保留相同的连接:错误
数据流使用 excel 源,使用 excel 连接管理器。数据流的目的是从每个 excel 文件中提取记录数,获取文件名和执行加载的用户,并将信息推送到数据库中。然而,当推送到数据库时,文件名和记录数始终是第一个使用的文件,与满足条件的文件数相同。
我没有收到任何错误消息或警告。我在我的控制流中使用了以下脚本来查看变量的值是否一直在变化,但是弹出的消息框显示我仍然得到初始值。
MessageBox.Show(Dts.Variables["User::ExcelFile"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
几天来我一直在阅读有关此的主题,这些是建议使用的设置,但这对我来说仍然是个问题。任何帮助将不胜感激。
从第一张图片看,您似乎已将变量 ExcelFileName 设置为表达式,因为表达式标记 (fx) 显示在变量图标上:
只需从变量中删除表达式并检查 EvaluateAsExpression
属性 是否设置为 False
在 foreach 循环编辑器中 select 名称和扩展名改为或完全限定。
如果您有子文件夹,请检查遍历子文件夹。
我进程中的 Foreach 循环容器没有将新文件名推送到已建立的变量中。它循环遍历该过程的次数与满足条件的文件一样多,我只需要文件名是动态的。
我创建了一个变量名称,其中包含我所需目录中第一个文件的完整文件路径。看起来像 C:\Somepath\ExcelFile.xlsx
我还创建了一个变量名 ExtProperties 以在 ConnectionString 中使用,其值为 "Excel 12.0;HDR=Yes"
Foreach 循环容器具有以下设置:
- 枚举器设置为 Foreach 文件枚举器
- 文件夹是我的文件的目录位置
- 文件当前设置为 *.xlsx
- 检索文件名设置为完全限定
我之前提到的 ExcelFileName 变量已设置为索引 0
我创建了一个 Excel 连接管理器,指向具有以下相关属性的初始文件:
- 延迟验证:真
表达式:我已经尝试将
ExcelFilePath
设置为 ExcelFileName 变量并使用以下内容 连接字符串:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::ExcelFileName] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""
现在它只使用 ConnectionString。
- 保留相同的连接:错误
数据流使用 excel 源,使用 excel 连接管理器。数据流的目的是从每个 excel 文件中提取记录数,获取文件名和执行加载的用户,并将信息推送到数据库中。然而,当推送到数据库时,文件名和记录数始终是第一个使用的文件,与满足条件的文件数相同。
我没有收到任何错误消息或警告。我在我的控制流中使用了以下脚本来查看变量的值是否一直在变化,但是弹出的消息框显示我仍然得到初始值。
MessageBox.Show(Dts.Variables["User::ExcelFile"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
几天来我一直在阅读有关此的主题,这些是建议使用的设置,但这对我来说仍然是个问题。任何帮助将不胜感激。
从第一张图片看,您似乎已将变量 ExcelFileName 设置为表达式,因为表达式标记 (fx) 显示在变量图标上:
只需从变量中删除表达式并检查 EvaluateAsExpression
属性 是否设置为 False
在 foreach 循环编辑器中 select 名称和扩展名改为或完全限定。 如果您有子文件夹,请检查遍历子文件夹。