SSIS正在从Excel工作表加载date

我有一个多个工作表的Excel文件,但只有第一个工作表上列出的date。 我想要做的是读取excel文件,将其放入一个variables中,以便稍后可以在数据stream任务中使用。

通常情况下,这是你运行磨床读写数据stream的任务,但是由于这些信息位于Excel表格的第一页,主要是关于报表的信息,所以读取信息有点困难。

以下是工作表的样子,我想从整个工作表中得到的唯一信息就是更具体的数据周期行, Dec 2016

在这里输入图像说明

任何方向将不胜感激,谢谢。

Excel工作表可以像表一样查询。 您可以使用Execute SQL Task来读取一系列单元格遍历结果,或者可以像读取范围一样读取单个单元格,并将其值存储在variables中。

这个过程在SSIS的Read Excel Value中有描述,并且包含了很多问题:

  1. 添加指向您的Excel文件的Excel连接器pipe理器
  2. 将其结果types设置为Single Row
  3. 将查询设置为SELECT * FROM [Sheet1$A6:A6] 。 这是第一个问题。 您不能指定列名称。 在数据stream查询中,您可以编写SELECT RIGHT(F1,8) FROM [Sheet1$A6:A6]来只提取date部分。 这在Execute SQL Task不起作用。
  4. Result Set部分中,将0结果集映射到新的stringvariables,例如PeriodCell 。 名称必须是0.这是第二个问题
  5. 您可以根据只返回PeriodCell最右边8个字符的expression式创build另一个variables,例如RIGHT( @[User::PeriodCell],8)

如果系统使用英文区域设置,则可以将string直接parsing为date。 在这种情况下,可以使用expression式(DT_DATE)RIGHT( @[User::PeriodCell],8)创buildDateTimevariables。 例如, (DT_DATE)"Dec 2016"返回1/1/2016

不幸的是,即使你改变了包的Locale属性,如果你的语言环境不是英语,这也不行。

如果您已经将“数据周期”列的单元格的内容加载到具有SSIS的SQL表中,则可以将它们从exceldate格式轻松转换为SQLdate格式,并使用下列之一:

date和时间

 select dateadd(second, (@time_xls - ROUND(@time_xls,0))*86400, dateadd(d, ROUND(@time_xls,0),'1899-12-30')) 

例如,将值42853.4673611111转换为“2017-04-28 11:13:00.000”

只有约会

 select dateadd(d,@time_xls,'1899-12-30') 

例如,值36464被转换为“1999-10-31 00:00:00.000”。