我有一个xlsx文件,该文件每月都会放入一个文件夹中。文件名会根据日期更改每个月(filename_8292019),我无法更改该日期。
我想构建一个foreach循环来拾取和处理xlsx文件(加载到SQL Server表中,然后将文件移动到存档文件夹中)。我无法弄清楚如何使用动态文件名(日期更改的地方)。
在将xlsx转换为CSV以及直接指向xlsx文件名时,我能够成功运行该软件包。
[平面文件目标[219]]错误:无法打开数据文件“文件名” 或与找不到文件相关的错误
答案 0 :(得分:2)
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
框中显示的内容。 (蓝色到蓝色)。
另一个变量将获取实际的文件名,并带有日期扩展名。稍后,在File System Task
中说,如果同时需要文件夹和文件名,则将变量连接起来。
就您遇到的Excel Connection Manager
错误而言,很抱歉,我没有帮助。我不使用它。我们拥有SentryOne的SSIS任务工厂,其中包括一个更具弹性的Excel连接器。