excel - SSIS 不会为动态 xlsx 文件名执行 foreach 循环
问题描述
我有一个 xlsx 文件,它将每月放入一个文件夹中。文件名将根据日期每月更改(filename_8292019),我无法更改。
我想构建一个 foreach 循环来获取 xlsx 文件并对其进行操作(加载到 SQL 服务器表中,将文件移动到存档文件夹)。我无法弄清楚如何使用动态文件名(日期更改的地方)来做到这一点。
在将 xlsx 转换为 CSV 以及直接指向 xlsx 文件名时,我能够成功运行包。
[平面文件目标 [219]] 错误:无法打开数据文件“文件名”或与未找到文件有关的错误
解决方案
容器选项卡上的Files:
条目将接受通配符。Collection
Foreach Loop
这里的一般模式是创建一个变量,比如FileName
. 将您的设置Files:
为:
Files:
BaseFileName*
或者,如果您想确保只选择电子表格,也许:
Files:
BaseFileName*.xlsx
选择Name and extension
或Fully qualified
,这将包括完整的文件路径。我通常只是使用Name and extension
文件路径并将其放入另一个变量中,因此当 Ops 告诉我他们正在移动我的放置位置时,我可以更改参数而不是编辑包。此步骤告诉容器记住它刚刚找到的文件的名称,以便您以后可以将其用于变量映射。
在Variable Mappings
选项卡上,选择您的变量名称并将其分配给Index
0。
然后,对于每个电子表格,容器将循环,获取它找到的与您的模式匹配的第一个文件的名称,并将带有日期扩展名(和路径,如果您这样做的话)的全名分配给您的变量. 将变量作为输入参数传递给循环内的任务并使用它来处理文件,包括将其移动到存档,否则您将陷入无限循环,一遍又一遍地处理相同的文件。<--这听起来像是经验之声吗?是的。去过也做过。
编辑:
在这里,FullFilePath
变量只是文件夹名称,没有文件引用。(红色变量为Folder
框中的红色条目)。
FileBaseName
变量驱动Files
框中显示的内容。(蓝色到蓝色)。
另一个变量获取带有日期扩展名的实际文件名。稍后,在 a 中说File System Task
,如果我需要将文件夹和文件名放在一起,我会连接变量。
至于Excel Connection Manager
你得到的错误,不幸的是我没有帮助。我不使用它。我们有用于 SSIS 的 SentryOne 任务工厂,其中包括一个更具弹性的 Excel 连接器。
推荐阅读
- python - 正则表达式空匹配 re.findall
- javascript - 手动点击后重置间隔
- python - 如何在 Python 中制作非阻塞计时器
- python - 运行 xlwings 时出现 WinError 87
- elasticsearch - 以非root用户身份运行elasticsearch时出现JavaNative错误
- python-3.x - 将自定义 yolov3 .weights 文件转换为 .tf 时出错
- r - 将逗号和井号分隔的字符串拆分为 R 中的不同列
- java - 为什么委派不能促进 Java 中的运行时多态性?
- oracle-apex - 如何正确对页面项目进行 URL 编码 - APEX 21.1
- ansible - 如何将 jinja2 变量传递给 json_query