2014-04-07 55 views
1

我有一個excel文件,它有一個標題行,這是我想要刪除的行。 thsi文件中的標題行是A1到W1的單元格合併爲一個。當我嘗試讀取文件時,這會導致問題,因爲我在等待列名。正確的列名存在於文件的第二行,這就是我想刪除第一行的原因。使用SSIS刪除excel文件的頂部行

爲了做到這一點,我想我可以在SSIS中使用'Excel Source'項目,因爲它支持SQL選項來編寫查詢。我想要做的是這樣的:

SELECT * from ExcelFile WHERE Row > 1 

我的文件只有在列中的數據A至W.

我不知道我可以在查詢中使用要做到這一點有什麼語法。 Excel Source項目中的查詢生成器將允許我使用列做許多事情,但是我沒有看到用於對行進行任何操作的選項。在線搜索和使用幫助沒有讓我到任何地方。

+0

看看這裏:http://social.msdn.microsoft.com/Forums/en-US/947fa27e-e31f-4108-a889-18acebce9217/ssis-excel-import-skip-first-rows ?forum = sqlintegrationservices – Goose

+0

這可能會起作用,但是如果我使用它,我希望以編程方式獲取工作表的名稱(只有1)和數據列。如果源文件更改,我不想更改我的代碼。有關這樣做的建議,並將其與您的建議結合使用? – Baub

+0

在那個答案中,我正在思考更多#2的內容。使用條件拆分來檢查標題內容,只要保持不變。然而,下面的答案也有一個很好的解決方案,因爲第一行總是一個標題。 – Goose

回答

0

您不需要使用語法。 轉到控制流程。 拉入數據流任務。 添加一個excel文件源...添加一個連接管理器 使用excel表格。 打開您的連接管理器,然後選中顯示的框。 列名在第一行。就是這樣,並添加你的目的地。

+0

你能告訴我如何使平面文件源連接到Excel文件?平面文件源用於文本文件,不能讀取excel文件,除非有一個我不知道的技巧。 – Baub

+0

抱歉! Excel連接管理器。 –

+0

我正在做這個試驗,該選項似乎告訴連接管理器尋找標題或不。如果我取消選中該框,則列名不顯示。它看起來像這樣 - http://imgur.com/FFqVKQD 如果我離開方格檢查,我回到原點。 如果我打開文件並手動刪除標題行,然後保存並關閉,當我取消選中該框時,我會得到我上傳的圖片中的內容。如果我選中該框,我會得到我想要的結果,但我必須手動修改該文件,這正是我試圖避免的情況 – Baub

0

這些解決方案都無法工作,因爲Excel驅動程序將被合併的第一行弄糊塗。您將無法使用任何驅動程序功能,例如跳過第一行來執行此操作。您需要運行一些腳本來打開Excel文件並手動刪除該行。

有一個在這個站點的一些基本示例腳本:

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

下面的代碼是從該網站由書面snsingh代碼調整。

你顯然會希望使用connnection管理器屬性,而不是硬編碼路徑

的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()