10

我有将数据从表导出到 Excel 文件的 SSIS 包

控制流 :-

控制流

数据流 :-

在此处输入图像描述

这是我的步骤:-

  1. 删除 Excel 表格
  2. 创建格式为我的选择查询的 Excel 表,我用来从数据库中检索数据
  3. 将数据库中的数据插入 Excel 文件

我使用查询喜欢Select * From Table Where --Some Condition

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

SQL Server 2008 和 Visual Studio 2008 与 BIDS

4

2 回答 2

24

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

解决方案#1:

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

  1. 文件系统任务 - 将模板文件复制到输出或工作目录(必要时重命名)
  2. OLEDB 源任务 - 查询数据源 (3000)
  3. 数据转换任务
  4. Excel 目标任务 - 将数据放入新的 Excel 文件

注意:您已经完成了第 2 步到第 3 步,您只需要确保连接到新的 Excel 文件。此外,为了澄清,步骤 1 不在控制流任务范围内。

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

解决方案#2:

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

我建议您尝试解决方案#1,看看它如何为您工作。

于 2013-01-04T15:31:09.510 回答
2

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

您可以使用脚本任务使用 COM obects 删除工作表。但为此,您需要放置 Excel PIA(主要互操作组件)以使其对 VSA 可见,或者在每次包运行时创建一个新的 excel 文件

其他如 Nicarus 建议的File System Task用于删除现有文件并在每次执行时创建一个新的 Excel 文件。

图表 :

在此处输入图像描述

文件系统任务:

在此处输入图像描述

使用相同的组件和查询用于Create Table使用Execute SQL task和您的DFT

于 2013-01-07T08:43:31.610 回答