Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用SSIS将数据导出到Excel文件_Sql_Sql Server - Fatal编程技术网

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

Sql 使用SSIS将数据导出到Excel文件,sql,sql-server,Sql,Sql Server,我有一个SSIS包,它将数据从表导出到Excel文件 控制流:- 数据流:- 这是我的步骤:- 删除Excel表格 创建Excel表格,格式为Select查询,用于从数据库检索数据 将数据从数据库插入Excel文件 我使用了类似Select*From表Where-Some条件的查询 我从10000行中检索3000行,并将这3000行放在我的excel工作表中。 但当打开我的excel工作表时,我看到滚动条一直到第10000行并结束,因此我的excel工作表大小也增加了。如何减少excel工作表的

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

控制流:-

数据流:-

这是我的步骤:-

删除Excel表格 创建Excel表格,格式为Select查询,用于从数据库检索数据 将数据从数据库插入Excel文件 我使用了类似Select*From表Where-Some条件的查询

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

SQL Server 2008&
Visual Studio 2008与BIDS

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

解决方案1:

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

文件系统任务-将模板文件复制到输出或在必要时重命名工作目录 OLEDB源任务-查询数据源 数据转换任务 Excel目标任务-将数据放入新的Excel文件 注意:您已经完成了步骤2到3,只需确保您正在连接到新的Excel文件。另外,为了澄清,步骤1不在控制流任务范围内

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

解决方案2:

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

我建议您尝试解决方案1,看看它对您的作用。

Drop table SheetName不会删除工作表,而只是删除行。如果您第一次加载了10K行,然后又通过将行数限制为3K来执行包,则excel文件仍将包含这些10K空行,因为它将保留图纸和空白

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

按照Nicarus的建议,使用文件系统任务删除现有文件,并在每次执行时创建一个新的Excel文件

图表:

文件系统任务:


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

仅检索3000行的原因是什么?让SQL查询只返回3000行而不是在SSI中限制它有意义吗?另外,这是用于Excel 97-2003 xls还是2007+xlsx?其Excel 97-2003文件格式。我的OLE DB源正在检索3000行并将其放在Excel文件中…那么为什么我的Excel文件滚动条一直到第10000行?因此,您的Excel文件必须已经存在,因为您必须连接到它。在这种情况下,它已经有多少空白记录?换句话说,如果您在运行SSIS包之前打开文件,它是否会向下滚动到10000行?请查看图表..我正在Excel工作表1上编写查询。删除表格,然后在Excel工作表上创建表格,该工作表只创建标题的第一行。能否在“创建Excel表格”任务中发布查询?我也在使用选项1,但遇到错误。在上面选项1中的文件复制任务步骤1之后,我的程序包在步骤4失败,错误是表格excel工作表不存在。尽管如此。有人遇到过这个问题吗?我确认模板文件已正确复制并存在。另外,4中的excel文件连接是一个包含新复制的excel文件的文件名的变量。