我有一个包含多个工作表的Excel文件,但只有第一个工作表上列出了日期。我试图做的是读取excel文件,将其放入变量中,以便以后在数据流任务中使用。
通常情况下,这是您的磨机读写数据流任务的运行,但由于此信息位于Excel工作表的第一页,主要是关于报告的信息,因此读取信息会更加困难。
以下是工作表的样子,我希望从整张工作表中获得的唯一信息是数据期一行,更具体地说是Dec 2016
非常感谢任何方向,谢谢。
答案 0 :(得分:1)
可以像表格一样查询Excel工作表。您可以使用Execute SQL Task
读取一系列单元格迭代结果,或者您可以读取单个单元格,就好像它是一个范围并将其值存储在变量中。
该过程在Read Excel Value in SSIS中描述,并包含很多问题:
Single Row
。SELECT * FROM [Sheet1$A6:A6]
。这是第一次陷入困境。您无法指定列名称。在数据流查询中,您可以编写SELECT RIGHT(F1,8) FROM
[Sheet1$A6:A6]
以仅提取日期部分。这不起作用
Execute SQL Task
。Result Set
部分中,将0
结果集映射到新的字符串变量,例如PeriodCell
。名称必须为0.这是第二个问题PeriodCell
的最右边8个字符,例如RIGHT( @[User::PeriodCell],8)
如果您的系统使用英语区域设置,则可以将字符串直接解析为日期。在这种情况下,您可以使用表达式(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"。