从变量中的Excel文件名获取日期

时间:2018-04-25 13:52:04

标签: excel ssis

我需要创建一个SSIS包,它将从Excel源中提取数据并将其加载到SQL Server目标中。

Excel文件名将有一个日期,通常文件名看起来像emp_20110909.xls,其中11是月,09是日,09是年。现在我想捕获这个日期,并在目标表中添加另一个名为" Extracted_Date "的列。并填充从此excel中提取的所有记录的捕获日期。

有谁能告诉我如何做这个过程?

1 个答案:

答案 0 :(得分:1)

Excel作为数据源不提供此功能,而平面文件源则具有此功能。我在What is the name of a file

下发表了关于此的博文

您要做的是让Foreach文件枚举器查找Excel文件的文件夹。将当前找到的文件的值分配给@[User::CurrentFileName]之类的变量。这看起来像C:\ssisdata\mySource\Input\emp_110909.xls

您将更新Excel连接管理器以在ExcelFilePath属性上具有表达式,因此现在@ [User :: CurrentFileName]的值发生更改,实际引用的文件也会发生变化。您可以在网上或search my answers

找到大量有关使用foreach枚举器的参考资料

您需要的最后一位是解析CurrentFileName的值以查找年份 (11),月(09)和日(09)元素 - 或者你想要它作为一个大值(110909)。为此,我将创建4个变量:FileDate,FileYear,FileMonth,FileDay all as string。是的,它们是数字但是对于我们的使用,将它们视为字符串会更容易。

FileDate将对应于emp之后的下划线之间的所有内容,直到xls的时间段。我们将使用SSIS的表达式语言来执行此操作,特定元素将是SUBSTRINGFINDSTRINGLEN

SUBSTRING(@[User::CurrentFileName], FINDSTRING(@[User::CurrentFileName], "emp_", 1) + LEN("emp_"),  6)

在这里,我很懒,只是“知道”长度是6并且硬编码。如果有人给我们一个emp_20110909.xls,这将失败。前面的表达式将通过查找句点的位置然后从emp_位置计算长度来修改。

现在我们知道了FileDate,我们可以使用SUBSTRING来分割出年份的前2个元素,接下来的2个月和最后的2个元素。

然后,您可以通过派生任务将这些值注入数据流,或通过执行SQL任务推入审计表。