SSIS 2017遍历Excel文件并从脚本任务中获取FileName



我被以上内容卡住了。

概述

我创建了一个SSIS包,它在excel文件的文件夹中循环,从这些文件中提取数据,并插入到SQL表中。

每天都会创建一个新的文件夹,如2020年3月30日、2020年3日31日和2020年4月1日等。

我的包处理了这个问题,并且从头到尾都运行得很顺利。

但是,我希望通过Derived列将文件名添加到目标SQL表中的每组数据中。

这就是我的问题所在。

我可以添加完整的文件路径和名称,但我似乎无法单独提取文件名。

环境

我创建了一个ForEachLoop容器,其中我将枚举器设置为"Foreach File Enumerator",添加到文件夹的完整路径中,并将文件设置为">.xl">

检索文件名设置为"完全合格">

在变量映射中,我添加了一个名为strFullFilePath的变量,索引为0。

然后我添加了数据流,最近添加了脚本任务。

在数据流中,我拖动了一个Excel源。

我通过输入要加载的一个文件的完整路径和文件名创建了Excel连接管理器。

我从变量中将数据访问模式设置为SQL命令。

保存后,我将Excel连接管理器属性设置为在运行时将动态文件名传递给Excel连接字符串,方法是将@[User::strFullFilePath]变量添加到ExcelFilePath表达式中。

最后,我为目标表创建了一个OLE DB SQL SERVER目标,并映射了字段。

该包运行时没有出现问题,并加载了所有文件,直到我添加了脚本任务并遵循了我在网上看到的一些建议。

脚本任务当前配置如下:-

Microsoft Visual Basic 2017

入口点:-主

ReadWriteVariables:-用户::strFullFilePath

当你编辑脚本时,我的代码是:-

公用Sub-Main((

Dts.Variables("strFullFilePath").Value = System.IO.Path.GetFileName(Dts.Variables("strFullFilePath").Value.ToString())
Dts.TaskResult = ScriptResults.Success

结束子

当我现在运行包时,脚本任务似乎执行正常,但主Excel文件加载失败,并显示消息"[Excel main Data Source[2]错误:无法从数据源检索列信息。请确保数据库中的目标表可用。">

我不确定,但看起来包现在认为文件路径是我们在For Each循环容器中输入的0。

我尝试了许多不同的场景,在脚本中的变量名之前加上"User::",还尝试了以下操作:-

Dts。变量("strFileName"(。值=系统。IO.Path.GetFileName(Dts.Variables("strFullFilePath"(.Value.ToString(((

但这只是给了我一个DTS脚本任务:运行时错误:调用的目标引发了异常。

我现在完全被难住了。

如有任何帮助/建议,我们将不胜感激。

问候,

NJC-

我想我可能已经解决了这个问题。

我在strFullFileName下的For Each循环容器中添加了一个变量strFileName,索引为1。

我已将VB脚本修改为:-

Dts.Variables("strFileName").Value = System.IO.Path.GetFileName(Dts.Variables("strFileName").Value.ToString())

现在我可以在DebugLocals窗口中看到文件名,并将结果发布到表中。

最新更新