SSIS从Excel工作表加载日期

时间:2017-08-29 11:49:10

标签: excel ssis conditional

我有一个包含多个工作表的Excel文件,但只有第一个工作表上列出了日期。我试图做的是读取excel文件,将其放入变量中,以便以后在数据流任务中使用。

通常情况下,这是您的磨机读写数据流任务的运行,但由于此信息位于Excel工作表的第一页,主要是关于报告的信息,因此读取信息会更加困难。

以下是工作表的样子,我希望从整张工作表中获得的唯一信息是数据期一行,更具体地说是Dec 2016

enter image description here

非常感谢任何方向,谢谢。

2 个答案:

答案 0 :(得分:1)

可以像表格一样查询Excel工作表。您可以使用Execute SQL Task读取一系列单元格迭代结果,或者您可以读取单个单元格,就好像它是一个范围并将其值存储在变量中。

该过程在Read Excel Value in SSIS中描述,并包含很多问题:

  1. 添加指向Excel文件的Excel连接管理器
  2. 将其结果类型设置为Single Row
  3. 将查询设置为SELECT * FROM [Sheet1$A6:A6]。这是第一次陷入困境。您无法指定列名称。在数据流查询中,您可以编写SELECT RIGHT(F1,8) FROM [Sheet1$A6:A6]以仅提取日期部分。这不起作用 Execute SQL Task
  4. Result Set部分中,将0结果集映射到新的字符串变量,例如PeriodCell。名称必须为0.这是第二个问题
  5. 您可以根据表达式创建另一个变量,该表达式仅返回PeriodCell的最右边8个字符,例如RIGHT( @[User::PeriodCell],8)
  6. 如果您的系统使用英语区域设置,则可以将字符串直接解析为日期。在这种情况下,您可以使用表达式(DT_DATE)RIGHT( @[User::PeriodCell],8)创建DateTime变量。例如,(DT_DATE)"Dec 2016"会返回1/1/2016

    不幸的是,如果您的语言环境不是英语,即使您更改了软件包的Locale属性,这也不会有效。

答案 1 :(得分:0)

如果您已加载"数据期间"的单元格内容将列放入带有SSIS的SQL表中,您可以轻松地将它们从excel日期格式转换为SQL日期格式,使用以下其中一项:

日期和时间

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"。