【问题标题】:Export data to Excel file using SSIS使用 SSIS 将数据导出到 Excel 文件
【发布时间】:2013-01-01 10:24:22
【问题描述】:

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

控制流程:-

数据流:-

这是我的步骤:-

  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 & 带有 BIDS 的 Visual Studio 2008

【问题讨论】:

  • 只检索 3000 行的原因是什么?让 SQL 查询只返回 3000 行而不是在 SSIS 中限制它是否有意义?另外,这适用于 Excel 97-2003 (xls) 还是 2007+ (xlsx)?
  • 它的 Excel 97-2003 文件格式。我的 OLE DB 源正在检索 3000 行并将其放入 Excel 文件中.....那么为什么我的 Excel 文件滚动条会一直到第 10000 行?从而增加 Excel 文件的大小。
  • 因此,您的 Excel 文件必须已经存在,因为您必须连接到它。既然如此,它已经有多少(空白)记录?换句话说 - 如果您在运行 SSIS 包之前打开文件,它会向下滚动到 10,000 行吗?
  • 看看图表..我在 Excel 表 1 上编写查询。删除表,然后在 Excel 表上创建表,它只创建第一行标题..
  • 您可以在“创建 Excel 表”任务中发布查询吗?

标签: sql sql-server


【解决方案1】:

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

解决方案 #1:

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

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

注意:您已经完成了第 2 步到第 3 步,您只需确保连接到新的 Excel 文件。另外,澄清一下,第 1 步是在控制流任务之外。

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

解决方案 #2:

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

我建议您尝试解决方案 #1,看看它对您有何帮助。

【讨论】:

  • 我也在使用选项 1,但遇到了错误。在文件复制任务(上面选项 1 中的第 1 步)之后,我的包在第 4 步失败,并出现表(excel 工作表)不存在的错误。即使确实如此。有人遇到过这个问题吗?我确认模板文件已正确复制并存在。此外,#4 中的 excel 文件连接是一个包含新复制的 excel 文件的文件名的变量。
【解决方案2】:

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

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

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

图表:

文件系统任务:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多