相关疑难解决方法(0)

如何在没有其他软件的情况下将SSIS导出到Microsoft Excel?

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

我发现的唯一答案是为我的列创建一个名为range单行.在命名范围内放入样本数据并隐藏它. SSIS附加数据并从单行读取元数据(足够接近它以丢弃其中的内容). 数据采用隐藏单行的格式. 这允许标题等.

哇屁股有多痛.这将需要450天的出口来收回损失的时间.但是,我仍然喜欢SSIS并将继续使用它,因为它仍然比Filemaker LOL更好.我的下一次尝试将在报表服务器中执行相同的操作.


原始问题说明:

如果您在Sql Server集成服务设计器中并且想要从第一行以外的其他内容开始将数据导出到Excel文件,那么让我们说第四行,您如何指定?

我尝试进入数据流的Excel目标,将变量中的AccessMode更改为OpenRowSet,然后将变量设置为"YPlatters $ A4:I20000"这无法说它无法找到工作表.该表称为YPlatters.

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

更新

显然,在Excel中,您可以选择一组单元格,并使用名称框命名它们.这允许您选择名称而不是没有$ dollar符号的工作表.奇怪的是,无论您指定的范围如何,它都会将数据附加到范围之后的下一行.奇怪的是,当您添加数据时,它会增加命名选择的行数.

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

另一个更新

无论我尝试什么,SSIS都会对文件的"第一行"进行采样,并根据找到的内容设置元数据.但是,如果样本数据的值为零但格式为第一行,则会将该列视为文本,并在前面插入带有单引号的数值('123.34).我还尝试了不反映列数据类型的标头.我尝试更改Excel目标的元数据,但它总是在我运行项目时将其更改回来,然后无法说它会截断数据.如果我告诉它忽略错误,它会导入除该列之外的所有内容.

一段时间后的几天几个小时......

另一个更新

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

我甚至试图制作样本数据行但没有成功......我认为没有人真正使用Excel和默认的MS SSIS导出.

如果您可以定义没有标题行的"插入范围"(A5到E5)并格式化这些列(货币,而不是粗体等)而不在Excel中跳过一行,这将非常有用.根据我的收集,没有第三方连接管理器,没有人使用SSIS导出Excel.

有关如何正确设置以便正确格式化数据的任何想法,即从Excel读取的元数据适用于实际数据,格式是否继承自第一行数据,而不是Excel中的标题?

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

我让这个工作得很好.我添加到Excel的一件事是Excel连接字符串中的IMEX = 1:"Excel 8.0; HDR =是; IMEX = 1".这迫使Excel(我认为)查看所有行以查看其中包含哪种数据.一般来说,这不会丢弃信息,例如,如果您有一个邮政编码然后大约9行,你有一个zip + 4,Excel没有这个空白完全没有错误.在IMEX = 1的情况下,它识别出Zip实际上是一个字符字段而不是数字字段.

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

IMEX = 1将成功导入前8行中缺少内容的数据,但是在没有数据的情况下导出数据将失败.因此,将它放在导入连接字符串上,而不是导出Excel连接字符串.

我不得不说,经过这么多摆弄之后,它的效果非常好.

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

excel ssis export openrowset

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

excel ×1

export ×1

openrowset ×1

ssis ×1