2016-08-11 136 views
1

在vb.net中創建應用程序以連接到Excel文件並對其進行編輯。向excel提出查詢時出現奇怪的錯誤

目前試圖修改Excel文件時,出現以下錯誤:

有了這個功能

Protected Friend Function obtenerHojaActual(ByVal columna As String, ByVal con As String) As String 
    Dim cmd As String 
    Dim WorkSheet As String = "" 
    Try 
     libro = app.Workbooks.Open(con) 
     For Each hoja As Microsoft.Office.Interop.Excel.Worksheet In libro.Worksheets 
      cmd = "SELECT [" & columna & "] FROM [" & hoja.Name & "$]" 
      Dim adapter As New OleDbDataAdapter(cmd, conexion) 
      Dim tabla As New DataTable 
      adapter.Fill(tabla) 
      adapter.Dispose() 
      //Code 
      //Code 
      //Code 
      tabla.Dispose() 
     Next 
     libro.Close() 
     app.Quit() 
     Return WorkSheet 
    Catch ex As Exception 
     repairmanMessage("Error inesperado", ex.Message, My.Resources._error).ShowDialog() 
     principal.lbldireccion.ForeColor = Color.Red 
     Return WorkSheet 
    End Try 
End Function 

得到這個:

enter image description here

「沒有指定的值對於一些所需的參數「

而與此:

Protected Friend Function obtenerErrores(ByVal columna As String, ByVal hoja As String, ByVal tipo As String) As Integer 
    Dim cmd As String = "SELECT [" & columna & "] FROM [" & hoja & "$]" 
    Dim errores As Integer = 0 
    Dim fecha As Date 
    Dim tabla As New DataTable 
    Try 
     Dim adapter As New OleDbDataAdapter(cmd, conexion) 
     adapter.Fill(tabla) 
     adapter.Dispose() 
     //Code 
     //Code 
     //Code 
     tabla.Dispose() 
     Return errores 
    Catch ex As Exception 
     repairmanMessage("Error inesperado", ex.Message, My.Resources._error).ShowDialog() 
     principal.lbldireccion.ForeColor = Color.Red 
     Return errores 
    End Try 

得到這個錯誤...

enter image description here

我嘗試使用參數化查詢,但看起來像Excel中不要工作得很好用那個東西(也許,我不知道用於Excel的查詢的語法)。

最奇怪的是,在代碼的其他部分,不要給我錯誤,程序只是在我試圖修改文件時拋出錯誤,儘管我得到這兩個錯誤,但excel表單被修改就像我想要的那樣。

什麼可以是?

+0

你在你的'Exception'對象有一個'InnerException'?那些通常會告訴你什麼參數丟失。 –

+0

不...讓我添加它,看看 – TwoDent

+0

我插入了你告訴我的內容,並打印出一個空白的msgbox ... – TwoDent

回答

0

好吧,我坐下來檢查一切,我不得不想一想發生了什麼。我發現我的代碼沒有任何錯誤(這就是爲什麼即使程序給我錯誤,文件也會被修改)...並且也發現了這個問題,讓我用Excel文件示例來解釋它:

enter image description here你可以看到,我使用我的連接字符串HDR屬性(「HDR =是;」表示第一行包含列名,而不是數據。「HDR =否;」表示正好相反,)已經定義了4列(姓名,姓氏,日期,年齡...不多!)。

我們與此示例文件現在運行程序,並仔細看會發生什麼:

enter image description here

正如我們在第一張圖片所看到的,我從來沒有在這個位置(「F1」創建了一列)...顯然,有些時候你在Excel中沒有意識到我稱之爲「虛幻列」。我想這是因爲該列的第一個單元格沒有寫入任何內容,程序會根據它們的位置自動給出它的名稱('F1'是幽靈列)。

要解決此問題,當我進行查詢時,首先檢查我的參數「列」是否爲空。

Protected Friend Function obtenerHojaActual(ByVal columna As String, ByVal con As String) As String 
    If (Not String.IsNullOrEmpty(columna)) Then 
     //Blah blah 
     //Blah blah 
     //Blah blah 
    End If 
    Return "Desconocida" 
End Function 

然後我們開始吧!

enter image description here

相關問題