Vb.net 查询excel时出现奇怪错误
我正在vb.net中制作一个应用程序,用于连接Excel文件并对其进行编辑 在尝试修改Excel文件时,出现以下错误: 具有此功能Vb.net 查询excel时出现奇怪错误,vb.net,excel,Vb.net,Excel,我正在vb.net中制作一个应用程序,用于连接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.W
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文件示例来解释: 我在连接字符串中使用HDR属性(“HDR=Yes;”表示第一行包含列名,而不是数据。“HDR=No;”表示相反的内容。)如您所见,我已经定义了4列(名称、姓氏、日期、年龄……不多!) 我们现在使用此示例文件运行程序,并仔细查看发生了什么: 正如我们在第一张图片中看到的,我从未在该位置创建过列('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
我们走了
好的,我坐下来检查了一切,我不得不想一想发生了什么。我发现我的代码没有任何错误(这就是为什么即使程序给了我错误,文件还是被修改了)。。。我也发现了这一点,让我用一个Excel文件示例来解释: 我在连接字符串中使用HDR属性(“HDR=Yes;”表示第一行包含列名,而不是数据。“HDR=No;”表示相反的内容。)如您所见,我已经定义了4列(名称、姓氏、日期、年龄……不多!) 我们现在使用此示例文件运行程序,并仔细查看发生了什么: 正如我们在第一张图片中看到的,我从未在该位置创建过列('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
我们走了
您的
异常
对象中是否有内部异常
?这些通常会告诉您缺少什么参数。不。。。让我添加它,看看我插入了你告诉我的内容,并给我打印了一个空白的msgbox…Messagebox不是调试的好方法。尝试检查异常本身。对于“$不是有效名称”错误,当发生此错误时,hoja
是否有可能是空字符串?您的异常
对象中是否有InnerException
?这些通常会告诉您缺少什么参数。不。。。让我添加它,看看我插入了你告诉我的内容,并给我打印了一个空白的msgbox…Messagebox不是调试的好方法。尝试检查异常本身。对于“$不是有效名称”错误,发生此错误时,hoja
是否有可能是空字符串?