2015-06-03 39 views
0

我有一個ssis軟件包,它需要一個excel文件並導入它,但是如果工作表中的任何一列沒有填寫,那麼導入失敗。檢查Excel文件表中是否有缺失的列

我試圖編寫一些代碼來檢查工作表中的列標題,以確保它包含一組列表的列表,它不需要檢查是否存在正確的順序,只要它們存在。

的代碼,我至今如下

Dim strFile As String 

strFile = Dts.Variables("User::found_file").Value.ToString 

Dim xlConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & _ 
     strFile & ";Extended Properties=""Excel 12.0 XML;HDR=YES""" 
Dim xlConnection As New OleDbConnection(xlConnectionString) 
xlConnection.Open() 

Dim tablesInFile As DataTable = xlConnection.GetSchema("TABLES") 

Dim currentTable As String 
Dim columnsInTable As DataTable 
Dim columnRestrictions(3) As String 
Dim columnInTable As DataRow 
Dim currentColumn As String 

For Each tableInFile As DataRow In tablesInFile.Rows 

    currentTable = tableInFile.Item("TABLE_NAME").ToString 


    'tray header 
    If currentTable = "'Tray Header$'" Then 
     columnRestrictions(2) = currentTable 
     columnsInTable = xlConnection.GetSchema("COLUMNS", columnRestrictions) 

    end if 
next 

我需要檢查所有列的一個簡單的方法,以確保它們都存在,而不必做一個循環,並逐項檢查,一個在一次。

我需要它將失敗布爾值標記爲true,如果列丟失。

「托盤標題」表中包含的列是托盤標識,托盤名稱,描述,數量。

回答

1

您可以使用一個簡單的SELECT驗證您的文件:

Dim blnMissingColumns As Boolean = False 

    Dim cmdTest As OleDbCommand = xlConnection.CreateCommand 
    cmdTest.CommandText = "SELECT TOP 1 trayid, trayname, description, quantity FROM [Tray Header$]" 

    Try 
     cmdTest.ExecuteNonQuery() 
    Catch ex As Exception 
     If TypeOf ex Is OleDbException Then 
      If CType(ex, OleDbException).ErrorCode = -2147217904 Then 
       blnMissingColumns = True 
      End If 
     End If 
    End Try 

    cmdTest.Dispose() 
+0

輝煌,完美工作。非常感謝 – Stew