如何将SSIS导出到Microsoft Excel而无需其他软件?

这个问题很漫长,因为我试图让SSIS正确导出Excel数据很长时间以来一直在更新这个问题。 我设法解决这个问题,虽然不正确 。 除了提供正确答案的人之外,这个问题中列出的解决scheme并不可怕。

我find的唯一答案是创build一个足够宽的足够我列的单行 。 在指定的范围内放置示例数据并将其隐藏SSIS追加数据并从单行读取元数据 (足够接近以便放入内容)。 数据采用隐藏的单行格式。 这允许标题等

哇,屁股是多么的痛苦。 这将需要超过450天的出口来弥补损失的时间。 不过,我仍然喜欢SSIS,并继续使用它,因为它比Filemaker LOL还要好。 我的下一个尝试将在报表服务器上做同样的事情。


原始问题笔记:

如果您使用的是Sql Server集成服务devise器,并且希望将数据导出到从第一行开始的某个Excel文件,那么可以说第四行,您如何指定它?

我试着进入数据stream的Excel目的地,将AccessMode从variables改为OpenRowSet,然后将该variables设置为“YPlatters $ A4:I20000”,这表示无法find工作表。 该表被称为YPlatters。

我以为你可以指定(Sheet $)(起始单元格):(结束单元格)?

更新

显然,在Excel中,您可以select一组单元格并使用名称框命名它们。 这允许您select名称而不是没有$美元符号的工作表。 奇怪的是,无论你指定的范围,它将数据追加到范围后面的下一行。 奇怪的是,当你添加数据时,它增加了命名select的行数。

另一个奇怪的是,数据采用指定范围的最后一行的格式。 我的标题行是粗体的。 如果我指定以标题行结尾的范围,则数据将附加到下面的行,并使所有条目变为粗体。 如果指定一行较低,则在标题行和数据之间放置一个空行,但数据不是粗体。

另一个更新

无论我尝试什么,SSIS都会对文件的“第一行”进行采样,并根据find的内容设置元数据。 但是,如果您的示例数据的值为零,但格式设置为第一行,则将该列视为文本,并在前面插入单引号的数字值('123.34)。 我也尝试了不反映列的数据types的标题。 我尝试更改Excel目标的元数据,但是在运行项目时总是将其更改回来,然后无法将其截断数据。 如果我告诉它忽略错误,它会导入除列以外的所有内容。

几天后的几个小时…

另一个更新

我尝试了所有的组合。 一个主要工作的例子是创build从列标题开始的命名范围。 格式化您的列标题,因为您希望数据看起来像数据采取这种格式。 在我的例子中,这些是从A4到E4,这是我定义的范围。 SSIS附加到定义的范围之后的行,所以定义A4到E68附加从A69开始的行。 您将连接定义为第一行包含字段名称。 它占据了标题行的元数据,奇怪的不是第二行,而是猜测数据types,而不是列的格式化数据types,即标题是文本,所以我所有的元数据都是文本。 如果您的标题为粗体,那么您的所有数据也是如此。

我什至试图做一个示例数据行没有成功…我不认为任何人实际上使用默认的MS SSIS导出Excel。

如果你可以定义没有标题行的“插入范围”(A5到E5),并将这些列(货币,不是粗体等)格式化而不跳过Excel中的行,这将是非常有帮助的。 从我收集,没有人使用SSIS导出Excel没有第三方连接pipe理器。

任何关于如何正确设置的想法,以便数据格式正确,即从Excel中读取的元数据适合于真实的数据,而格式是从第一行数据inheritance的,而不是Excel中的头文件?

最后一次更新(2009年7月17日)

我得到这个工作得很好。 我添加到Excel中的一件事是Excel连接string中的IMEX = 1:“Excel 8.0; HDR =是; IMEX = 1”。 这迫使Excel(我认为)查看所有行以查看其中的数据types。 一般来说,这不会丢失信息,比如说,如果你有一个邮政编码,然后大约9行,你有一个zip + 4,Excel没有这个空白,完全没有错误的领域。 IMEX = 1,它认识到Zip实际上是一个字符字段而不是数字。

当然,还有一个更新(2009年8月27日)

IMEX = 1将成功导入前8行中缺less内容的数据,但在没有数据存在的情况下将无法导出数据。 所以,请在您的导入连接string上,而不是您的导出Excel连接string。

我不得不说,经过这么多的摆弄之后,它运作得非常好。

PS如果您使用的是x64位版本,请确保从C:\ Program Files \ Microsoft SQL Server \ 90 \ DTS.x86 \ Binn中调用DTExec。 它将加载32位Excel驱动程序,并正常工作。

在脚本任务中创buildExcel工作簿会比较容易,然后在stream程中稍后提取?

SSIS的引擎部分是好的,但与Excel的集成是可怕的

“将SSIS与Excel结合使用,就像有一个热焦油把你的iHole放在一个路锥里”

Zim博士,我相信你是最初提出这个问题的人。 我完全感觉到你的痛苦。 我喜欢SSIS整体,但我绝对讨厌Excel标准的有限工具。 我想要做的就是在Excel中加粗标题或Row1logging,而不是加下面的logging。 我没有find一个很好的方法来做到这一点; 授予我接近这个没有脚本任务或自定义扩展,但你会认为这个简单的东西将是一个标准的select。 看起来像我可能会被迫研究和编程一些东西,看起来应该是如此重要的任务。 我已经花了很多时间在这个自己。 有谁知道,如果你可以使用Excel的XML版本:2000 / XP / 2003? 谢谢。

这是一个古老的线程,但是如何使用平面文件连接并将数据作为格式化的HTML文档写出。 将页眉中的MIMEtypes设置为“application / excel”。 当您将文档作为附件发送并且收件人打开附件时,它将打开浏览器会话,但应该按照页面中指定的样式(CSS)格式化数据,并popupExcel顶部。

你可以让SSIS将数据写入一个从A1开始的Excel工作表,然后创build另一个工作表,按照你的喜好进行格式化,引用另一个工作表的A1,但将其显示为A4? 也就是说,在“漂亮”纸张上,A4将在SSIS表格中引用A1。

这将允许SSIS做它的好处(操纵基于表格的数据),但是允许Excel格式化或操作,但是你可能会喜欢。

当excel是SSIS中的目的地,或SSRS中的目标导出types时,对格式化和指定最终文件的方式没有太多控制。 我曾经为SSRS写过一个自定义的excel渲染引擎,因为我的客户对生成的最终Excel报告的格式非常严格。 我用'Excel xml'来完成我的自定义渲染器内完成的工作。 也许你可以使用XML输出并使用XSLT将其转换为Excel XML。

我知道你不想使用脚本组件,所以也许你可以使用脚本包含的代码来创build自己的自定义任务 ,以便其他人可以在将来使用它。 在这里检查一个例子。

如果这似乎是可行的我使用的解决scheme是CarlosAg Excel Xml作家库 。 有了这个,您可以创build类似于使用Interop库的代码,但会生成xml格式的excel。 这避免了使用Interop对象,这有时会导致excel进程四处闲逛 。

而不是使用迂回的方式来做这个试图写入数据到特定单元格的练习,格式化单元格,对它们进行格式化,考虑到SSIS对于EXCEL的支持,这确实是一个非常辛苦的工作,我们可以去“模板”的方式来做到这一点。

假设我们需要在所有单元格中写入数据,并将所有的定制格式化。 拥有所有格式的表单,比如说“SheetActual”,而容纳数据的单元格实际上有Lookups / refrences / Formulaes来引用SSIS在隐藏表格中导出的原始数据,表示同一个Excel的“SheetMasterHidden”连接。 这个“SheetMasterHidden”实质上将主数据保存为SSIS将数据写入Excel的默认格式。 这样您就不用担心格式化数据运行时。

格式化Excel是一次性工作“如果”格式不经常改变。 如果格式改变,格式决定运行时,这个解决scheme可能不会很好。

答案就在这个问题上。 随着时间的推移,它成为一个进步状态。 但是,如果创buildTABLE演示文稿,则会有SSRS创buildExcel文件。 它工作得很好。