SSIS 2008,Excel 2007 正确格式化 excel 列(导出,不导入)
Posted
技术标签:
【中文标题】SSIS 2008,Excel 2007 正确格式化 excel 列(导出,不导入)【英文标题】:SSIS 2008, Excel 2007 formatting excel columns properly (Exporting, not importing) 【发布时间】:2009-12-23 18:38:51 【问题描述】:我在将数据导出到 Excel 2007 电子表格时遇到了一些格式问题。
我有一个模板文件,其中列的格式正确,但是当导出数据时,它没有得到正确的格式(货币、短日期等)
我想我有两个选择
让 excel 自动运行宏。 (讨厌这个想法)
在数据进入 Excel 之前对其进行格式化,并使其仅为字符串数据。 (我也不喜欢这个主意,因为你会在每个单元格旁边看到那些烦人的数据转换箭头)
我之前使用过 IMEX=1 技巧来解决数据导入问题,但是导出时有什么特殊技巧吗?
谢谢,
【问题讨论】:
您能否举例说明日期或货币如何出错?什么是 DB 格式,它在 Excel 中是如何格式化的? 请帮帮我,我也需要这样做!!你能很好地完成这项工作吗? 【参考方案1】:我花了很长时间试图弄清楚这一点。
您需要做的是在要导出到的电子表格中隐藏一行数据。
SSIS 会将值放入电子表格中,并假定类型是紧挨着上面的行的类型。所以数据行需要是电子表格的最后一行,每一列的数据需要是你想要的类型。
你会认为有更好的方法来做到这一点。没有。对不起:-)
【讨论】:
关闭...哦,如此接近...试过那个。不幸的是,它没有选择正确的格式。例如,在一列中,我将数据格式化为会计 ($ 0.00) 当它输出时,它实际上选择了带有 2 个小数位的通用数字格式,没有美元符号。我不确定我对细节有多在意,但我想知道我是否真的被卡住了。 @James-Wiseman 我正在尝试解决与此类似的问题,只是想弄清楚在哪里插入隐藏的数据行,您能帮忙吗? 我会把它设为 SS 的第一行,然后隐藏该行。 @James-Wiseman - 如果 excel 导出直到单元格 B5 才开始填充数据,这会受到影响吗?我在 excel 连接字符串中使用如下选择查询?选择 * 从 [Sheet1$b5:F5] 建议您在查询中使用选择的虚拟数据进行某种联合以形成第一行。【参考方案2】:因此,经过大量格式化和咬牙切齿,我得出了最终的解决方案。看来您仍然需要顶部的隐藏行才能使用 excel。这决定了数据的格式是数字还是字符串。如果要进行更多格式化,则需要将脚本任务添加到 SSIS 包中。我只是在处理结束时将以下几行放入 .net 脚本任务中,并立即修复它。
请不要吐槽 DailyWTF 质量代码 ;-)
Dim wb As Microsoft.Office.Interop.Excel.Workbook
excel = New Microsoft.Office.Interop.Excel.Application
wb = excel.Workbooks.Open("c:\reports\Report.xlsx")
'This is the long ass Accounting Format'
wb.Worksheets("Sheet1").Columns("E:E").NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
wb.Save()
wb.Close()
excel.Quit()
【讨论】:
这无法完成,因为需要在服务器中安装 Excel 互操作才能执行此操作。微软不推荐。【参考方案3】:解决方案非常简单,它会让你尖叫。只需使用 SSIS 中 SQL 任务框中的 CREATE TABLE SQL 命令即可。将连接类型设置为 EXCEL。步骤如下:
让我们使用“TEST”作为电子表格上的标签名称。
1.) 将模板文件复制到新文件。
2.) 创建 SQL 任务,将连接类型设置为 Excel,并将连接字符串用于新创建的 Excel 文件。使用下面的代码作为示例:
删除表TEST
去
3.) 创建另一个 SQL 任务(使用相同的设置)并使用以下代码:
创建表TEST
(Column1
整数,
Column2
日期时间,
Column3
NVARCHAR(50),
Column4
钱
)
去
您现在可以开始写入数据了。我遇到的几件事是我必须使用 ` 字符而不是 ' 作为逗号。另外,我尝试在一个 SQL 任务中同时使用 DROP 和 CREATE 命令,但它对我不起作用,所以我使用了两个。
【讨论】:
以上是关于SSIS 2008,Excel 2007 正确格式化 excel 列(导出,不导入)的主要内容,如果未能解决你的问题,请参考以下文章
SSIS 包在 Visual Studio 2010 中卡住了“验证 Excel 源”