使用SSIS删除Excel文件的顶行

时间:2014-04-07 21:56:56

标签: sql excel ssis

我有一个excel文件,它有一个标题行,这是我要删除的行。 thsi文件中的标题行是A1到W1合并为一个的单元格。当我尝试读取文件时,这会导致问题,因为我期待列名称。文件的第二行中存在正确的列名,这就是我想要删除第一行的原因。

为了实现这一点,我想我能够使用“Excel来源”#39; SSIS中的项,因为它支持用于编写查询的SQL选项。我想做的是这样的事情:

SELECT * from ExcelFile WHERE Row > 1

我的文件只有A列到W列的数据。

我不知道在查询中我可以使用什么语法来执行此操作。 Excel Source项目中的查询构建器将允许我使用列执行许多操作,但我没有看到使用行执行任何操作的选项。在线搜索并使用帮助并没有把我带到任何地方。

2 个答案:

答案 0 :(得分:0)

您不需要使用语法。 去控制流程.. 引入数据流任务。 添加excel文件源...添加一个连接管理器 用excel表。 打开您的连接管理器,然后选中显示的框。 列名在第一行。这就是它,并添加你的目的地。

答案 1 :(得分:0)

这些解决方案都不会起作用,因为合并后的第一行会混淆Excel驱动程序。您将无法使用任何驱动程序功能,例如跳过第一行来执行此操作。您需要运行一些脚本来打开Excel文件并手动删除该行。

此站点有一些基本的示例脚本:

http://www.sqlservercentral.com/Forums/Topic1327014-1292-1.aspx

以下代码改编自该网站上 snsingh 所编写的代码。

你显然想要使用连接管理器属性,而不是硬编码路径

Excel需要安装在SSIS服务器上才能工作 - 这是使用Excel自动化的唯一方法。

Dim filename As String
Dim appExcel As Object
Dim newBook As Object
Dim oSheet1 As Object

appExcel = CreateObject("Excel.Application")
filename = "C:\test.xls"
appExcel.DisplayAlerts = False

newBook = appExcel.Workbooks.Open(filename)
oSheet1 = newBook.worksheets("Sheet1")
oSheet1.Range("A1").Entirerow.Delete()


newBook.SaveAs(filename, FileFormat:=56)
appExcel.Workbooks.Close()
appExcel.Quit()