使用SSIS将数据导出到Excel文件

时间:2013-01-01 10:24:23

标签: sql sql-server

我有SSIS包,它将数据从表格导出到Excel文件

控制流程: -

Control Flow

数据流: -

enter image description here

这是我的步骤: -

  1. 删除Excel表格
  2. 使用我用于从数据库检索数据的Select Query的格式创建Excel表格
  3. 将数据从数据库插入Excel文件
  4. 我使用Select * From Table Where --Some Condition

    之类的查询

    我从10000行中检索3000行,并将这3000行放入我的Excel工作表中。 但是当打开我的Excel工作表时,我看到滚动条直到第10000行并且结束,因此我的Excel工作表大小也增加了。如何减少我的Excel表格尺寸?我的excel表只包含3000行,那么为什么空白单元格会一直到第10000行?

    SQL Server 2008& 带有BIDS的Visual Studio 2008

2 个答案:

答案 0 :(得分:22)

我相信您的问题与您用于创建文件的方法有关。您有两种选择,两者都应该解决您的问题:

解决方案#1:

您可以使用这些预定义列创建Excel文件,基本上是空输出文件 - 这将充当您的“模板文件”。你的流程就是这样:

  1. 文件系统任务 - 将模板文件复制到输出或工作目录(必要时重命名)
  2. OLEDB源任务 - 查询数据来源(3000)
  3. 数据转换任务
  4. Excel目标任务 - 将数据放入新的Excel文件
  5. 注意:您已完成第2步到第3步,只需确保连接到新的Excel文件即可。另外,为了澄清,第1步是在控制流程任务之外。

    这种方式很有用,因为您始终有一个空白且格式一致的Excel文件可供复制和使用。

    解决方案#2:

    另一个选项是使用脚本任务并创建Excel文件 - 您还可以在此任务中将数据加载到文件中。这需要对VB.NET或C#有一些基本的了解。基本上你需要一个XLS库(比如NPOI)。这更复杂,但为您提供最佳功能。

    我建议你尝试解决方案#1,看看它是如何运作的。

答案 1 :(得分:2)

Drop table SheetName不会删除工作表而只是deletes the row。如果您第一次加载10K行然后通过将行数限制为3K再次执行包,则excel文件仍将包含那些10K空行,因为它将表单与empty spaces一起保留。< / p>

您可以使用脚本任务使用COM对象删除工作表。但是,您需要放置Excel PIA(主Interop Assemply)以使其对VSA可见,或者每次运行包时创建新的Excel文件< / p>

按照Nicarus的建议,使用File System Task删除现有文件,并在每次执行时创建一个新的Excel文件。

图表:

enter image description here

文件系统任务:

enter image description here

使用Create TableExecute SQL task

DFT使用相同的组件和查询