2012-12-12 21 views
0

我正在研究一個SSIS包,該包使用每個循環遍歷目錄和數據流任務中的excel文件來導入它們。在數據流之前確定Excel電子表格格式任務

我遇到的問題是我正在使用的項目經理並不認爲用戶會始終遵循結構。所以如果一個文件在文件夾中,並且軟件包試圖導入它,但是電子表格缺少列或者有額外的列,它會生成錯誤,當然也會出錯。即使我已將任務設置爲不會使包失敗,包確實失敗,然後其他文件不被導入。

所以,我想知道什麼是最簡單的方式來確定電子表格格式不正確,或停止錯誤的程序包執行失敗?採取上述步驟後,我只需使用文件複製任務將文件移動到「失敗」文件夾。然後繼續處理電子表格。

回答

2

我有一個類似於你的SSIS包,除了它遍歷Microsoft Project文件列表並將記錄導入數據庫。在Foreach循環容器中,它首先執行檢查以查看文件是否存在。我正在向腳本傳遞FileName的字符串變量和布爾變量bolFileExists。我知道你正在尋求也驗證文件的格式正確,我猜你可能能夠應用類似於下面的腳本任務代碼的東西:

public void Main() 
    { 
     if (File.Exists(Dts.Variables["FileName"].Value.ToString())) 
     { 
      Dts.Variables["bolFileExists"].Value = true; 
     } 
     else 
     { 
      Dts.Variables["bolFileExists"].Value = false; 
     } 
    } 

從這個領導是兩個路徑。第一個應用表達式「@ bolFileExists == True」,然後執行導入過程。另一個會應用表達式「@ bolFileExists == False」並跳過該文件並允許處理下列文件。在表格驅動的SSIS包中,對於這兩個選項,導入狀態在列出正在導入的文件的表中定義。我有近40個導入的文件,這允許我運行一個查詢來確定是否有任何文件被遺漏,並在該過程完成後發送的自動電子郵件中應用該查詢。

至於不正確的格式,我的第一個建議是爲用戶提供一個模板,以遵循其中一個工作表中的指示。之後,您可以嘗試應用臨時表或SQL來收集感興趣的工作表中包含的列表或列數。你採取的方法取決於被拉的信息的複雜性。再次在我的SSIS包中,數據在導入後仍然可以關閉。在這種情況下,我首先將其導入臨時登臺表格,在該表格中執行檢查,然後只有符合感興趣標準的臨時登臺表格使用MERGE標準化爲最終登錄表格。

讓我知道如果您有任何問題。希望這有助於解決部分問題。

0

上有SO 35篇文章,其中基礎數據庫架構中被引用: https://stackoverflow.com/search?q=GetOleDbSchemaTable

儘量充實信貸基金的腳本中,你會用你的XLS文件基礎連接爲您的OLEDB源的模式檢測步驟。一旦你提取了一個字段列表,你可以驗證所有必要的字段是否存在正確的順序。

0

如果您正在討論驗證列等的準確性,您可以有一個腳本任務,它將打開excel文件並查看每列以驗證內容是否正確。這可以使用OpenXML或InterOp.Office參考來完成。

如果你在談論excel版本,你可以有一個腳本任務來查看文件的擴展名(儘管如果他們重命名文件,這真的沒有幫助)。