我有SSIS包,它将数据从表格导出到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
答案 0 :(得分:22)
我相信您的问题与您用于创建文件的方法有关。您有两种选择,两者都应该解决您的问题:
解决方案#1:
您可以使用这些预定义列创建Excel文件,基本上是空输出文件 - 这将充当您的“模板文件”。你的流程就是这样:
注意:您已完成第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文件。
图表:
文件系统任务:
使用Create Table
和Execute SQL task
DFT
使用相同的组件和查询