奇怪的错误,当查询到Excel

我在vb.net中创build一个应用程序来连接到一个Excel文件并进行编辑。

在尝试修改Excel文件的时刻,出现以下错误:

有了这个function

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 

收到:

在这里输入图像说明

“一些所需的参数没有指定的值”

与此:

 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 

得到这个错误…

在这里输入图像说明

我尝试使用参数化查询,但看起来像Excel不工作正常(或者,我不知道与Excel使用该查询的语法)。

最奇怪的是,在代码的其他部分,不要给我错误,当我试图修改文件时,程序只是抛出错误,虽然我得到这两个错误,Excel表单被修改,只是我想要的。 。

可以是什么?

好吧,我坐下来检查一切,我不得不想一想发生了什么。 我发现我的代码没有任何错误(这就是为什么即使程序给我错误,该文件被修改),并发现了这一点,让我解释一个Excel文件的例子:

在这里输入图像说明

我在我的连接string中使用HDR属性( “HDR =是;”表示第一行包含列名,而不是数据“HDR =否;”表示相反 ),你可以看到,我已经定义了4列,姓,date,年龄…不多!)。

我们现在用这个示例文件运行程序,仔细看看会发生什么:

在这里输入图像说明

正如我们在第一张图片中看到的那样,我从来没有在该位置创build过一列('F1')…显然,有时候您并没有意识到我在Excel中称之为“幻影列”。 我想这是因为列的第一个单元格没有写入任何内容,程序根据它们的位置自动给出它的名字('F1'是幽灵列)。

要解决这个问题,当我进行查询时,首先检查我的参数“column”是否为空。

  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 

我们走了!

在这里输入图像说明