SSIS动态Excel目标文件名

3

我该如何配置数据流任务,从 MS SQL Server 2008 数据源中提取数据并将其放入一个名为“日期文件名”.xls 的 Excel 文件中?

4个回答

3

在SSIS中,Excel是最难处理的部分。通常我会存储一个只有列标题而没有其他内容的模板文件。我从一个任务开始,将模板文件复制到处理目录中。此时,您可以使用变量来创建文件名。或者,您可以在数据流中创建文件,然后在数据流之后的步骤中重命名文件。对于文本文件,我已经在表达式中动态创建了连接,但Excel似乎对此有点奇怪。


谢谢您的回复- 您可以提供一个示例吗? - sql rookie
4
这是正确的答案。在SSIS中使用Excel文件就像让以色列和巴勒斯坦外交官坐在一起尝试达成和平协议一样困难。即使按照得到最多赞的答案所述动态构建文件名,SSIS仍会报错,表格(sheetname)不存在。当然表格名称不存在,因为我们每次都在创建新文件。无论如何,我找到了这个解决方案,即创建一个模板并使用文件系统任务创建该模板的空白副本,然后填充它,是做类似事情的最安全方式。 - Shiva

2

假设您的列定义不会改变... 您可以执行以下操作:

  1. 右键单击 Excel 连接管理器
  2. 表达式
  3. 选择 connectionstring
  4. 构建表达式(例如:(DT_WSTR, 50) GETDATE() + @[user::FileName] +".xlsx")

在SSIS VS2008R2上的Excel连接管理器上下文菜单中找不到表达式。 - SarjanWebDev
我得到的文件输出为C:\TestFolder\Test2012-11-07 11:08:25.443000000.xls,考虑变量:@FolderDestination是c:\TestFolder\Test。有没有办法将它作为时间戳,例如FILENAME_YYYYMMDD_HHMMSS? - goofyui
1
@SarjanWebDev 没错,它在上下文菜单中不可用。您可以在属性窗口中找到它。(只是为了添加评论,以防有人仍然难以找到它) - Schalk
仅仅使用一个表达式作为文件名是不起作用的。 - Weihui Guo

1

HLGEM的答案确实有帮助。如@sql-rookie所请求的,我将提供一个示例,说明如何将Excel文件复制到以当前日期命名的新文件中。希望这能帮助未来遇到相同问题的其他人。

基本上,您只需要在Data Flow Task之后添加一个附加的File System Task。并使用一个variable作为目标文件路径:"\\\\file\\"+SUBSTRING((DT_STR,30, 1252) GETDATE(), 1, 10) +".xlsx"

enter image description here

enter image description here


1
选择Excel连接管理器实例的属性,单击“表达式”属性的省略号,并将“ExcelFilePath”的表达式设置为具有有效路径到Excel文件的变量,这样就可以处理连接字符串。
在设计时需要一个有效的Excel文件变量,否则连接管理器无法工作,您可以使用脚本任务在运行时覆盖它,以指向在设计时不存在的Excel文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接