0

我有一个文件夹,它每天转储 7 或 8 个 .xls 文件。在所有这些文件中,我只需要加载 2 个具有特定名称的文件.. ABC_datestamp.xls 和 XYZ_datestamp.xls。

问题是我无法隔离这两个文件名,因为同一个文件夹中有很多其他文件。第二个挑战是我的经理希望我一次加载上周的所有文件,这意味着我必须专门加载最近 7 天的文件。

现在我将这 7 个特定的文件复制到一个文件夹中,然后使用 for each 循环容器加载它。

无论如何,我可以使用脚本任务来生成文件名,如 ABC_02-Dec-2011.xls、ABC_01-Dec-2011.xls、ABC_30-Nov-2011.xls ......最后 7 天文件并将其作为变量传递给数据流任务?

有什么更好的建议吗?

我知道很多人都问过类似的问题,但我是 SSIS 的新手,无法找到好的答案。

非常感谢..

4

2 回答 2

2

我不会尝试构建所有可能文件名的列表,而是遍历文件夹中的所有文件并使用脚本任务来确定要进一步处理的文件。

控制流程如下所示: foreach 循环容器的屏幕截图

withFELC_InputFolderContents的变量映射因此设置: foreach 循环容器设置的屏幕截图

SCR_SetProcessFileFlag的配置: 脚本任务设置截图

SCR_SetProcessFileFlag的脚本是这样的:

    public void Main()
    {
        string targetFileFullPath = (string)Dts.Variables["User::TargetFileFullPath"].Value;
        string targetFileName = Path.GetFileName(targetFileFullPath);
        Dts.Variables["ProcessFileFlag"].Value = IsValidFileName(targetFileName);
        Dts.TaskResult = (int)ScriptResults.Success;
    }

    private bool IsValidFileName(string targetFileName)
    {
        bool result = false;
        if (Path.GetExtension(targetFileName) == "xls")
        {
            string fileNameOnly = Path.GetFileNameWithoutExtension(targetFileName);
            if (fileNameOnly.Substring(0, 4) == "ABC_" || fileNameOnly.Substring(0, 4) == "XYZ_")
            {
                string datePart = fileNameOnly.Substring(4);
                DateTime dateRangeStart = DateTime.Today.AddDays(-7);
                DateTime dateRangeEnd = DateTime.Today;
                DateTime fileDate;
                if (DateTime.TryParse(datePart, out fileDate)) 
                {
                    if (dateRangeStart <= fileDate && fileDate <= dateRangeEnd)
                    {
                        result = true;
                    }
                }
            }
        }
        return result;
    }

SCR_SetProcessFileFlag以及如此配置的优先级约束DTT_ProcessSelectedFile优先约束设置截图

(显然,具体逻辑IsValidFileName取决于您的特定要求。)

于 2011-12-03T19:04:20.960 回答
0

以下链接中的示例说明了如何遍历文件夹中的文件并存档与给定月份匹配的文件。在示例中,根据月份值将文件命名为myfile 20-08-2011, myfile 13-09-2011,然后将这些文件移动到具有月份名称等的存档文件夹AugustSeptember

该示例只是将文件归档。如果要加载数据,则需要放置一个数据流任务。在 Foreach 循环容器中。

如果您通过示例,您将获得解决问题的想法。

如何创建一个包,将给定文件夹中的所有文件复制到新文件夹中?

这是一个示例,展示了如何遍历文件夹并将 Excel 文件数据加载到数据库中。

如何将具有不同名称和相同架构的 Excel 文件导入数据库?

于 2011-12-02T17:32:57.677 回答