2013-04-12 95 views
2

我已經回顧了可能有我的答案的問題,不幸的是他們似乎不適用。這是我的情況。我必須從我的客戶導入工作表。在A,C,D和AA列中,客戶擁有我需要的信息。列的平衡有什麼我是毫無價值的信息。列標題在我需要的四列中保持一致,但在列無關緊要時非常不一致。例如單元格A1包含分區。所有電子表格都是如此。細胞B1可以包含任何從套管長度到全長的任何物體。我需要做的是僅導入我需要的列並將它們映射到SQL 2008 R2表。我已經在當前正在調用SSIS函數的存儲過程中定義表。SSIS中的腳本任務導入excel電子表格

問題是,當我嘗試導入具有不同列名稱的電子表格時,SSIS將失敗,我必須重新手動運行它以使字段設置正確。

我無法想象我正在嘗試做什麼以前沒有做過。就這樣,規模不會丟失,我有170個用戶擁有超過120個不同的電子表格模板。

我迫切需要一個可行的解決方案。在SQL中將文件存入我的表後,我可以做所有的事情。我甚至編寫了將文件移回FTP服務器的代碼。

+0

我真的不明白你的問題究竟是什麼。如果你總是加載列A,C,D和AA,那麼列「名稱」(我猜你的意思是第一行中的數據?)應該不重要,因爲你可以通過位置(數字)來引用它們,而不是名稱。如果這沒有幫助,請澄清你的意思是「列名」。 – Pondlife

+0

這正是我所要求的。我如何引用列號而不是第一行。我從來沒有這樣做過。在所有其他使用這種功能的情況下,我導入了所有內容,然後在SQL中選擇了相關信息。是否有教程介紹如何將Excel電子表格中的特定列導入到SQL中。 –

回答

3

我整理了一篇文章,描述我如何使用Script task to parse Excel。它允許我將決定性的非表格數據導入數據流。

核心概念是您將使用JET或ACE提供程序,只需從Excel工作表/命名範圍中查詢數據即可。一旦你有了,你有一個數據集,你可以逐行瀏覽並執行你需要的任何邏輯。在你的情況下,你可以跳過第1行的頭,然後只導入列A,C,D和AA。

該邏輯將在ExcelParser類中進行。因此,在71行foreach循環可能會被蒸餾至像(代碼近似值)

// This gets the value of column A 
current = dr[0].ToString(); 
// this assigns the value of current into our output row at column 0 
newRow[0] = current; 

// This gets the value of column C 
current = dr[2].ToString(); 
// this assigns the value of current into our output row at column 1 
newRow[1] = current; 

// This gets the value of column D 
current = dr[3].ToString(); 
// this assigns the value of current into our output row at column 2 
newRow[2] = current; 

// This gets the value of column AA 
current = dr[26].ToString(); 
// this assigns the value of current into our output row at column 3 
newRow[3] = current; 

顯然,你可能需要做類型轉換,並在這裏等,但是這是解析邏輯的核心。

+0

我想離線瞭解發生了什麼。我非常努力地正確地獲取這些信息。有沒有辦法做到這一點? –