Vb.net Can';t让ACE.OLEDB在datagridview中显示excel文件

Vb.net Can';t让ACE.OLEDB在datagridview中显示excel文件,vb.net,datagridview,excel-2007,oledb,Vb.net,Datagridview,Excel 2007,Oledb,在下面的代码中,我试图使用OLE.DB将Excel文件加载到datagridview中。程序运行,但datagridview仍然为空。知道为什么吗?我在64倍的机器上运行Excel2007,所以我将项目构建更改为x86,但它仍然无法工作。想法 Public Class Records Dim excel_app As Excel.Application Dim workbook As Excel.Workbook Dim sheet_name As String Dim sheet As Ex

在下面的代码中,我试图使用OLE.DB将Excel文件加载到datagridview中。程序运行,但datagridview仍然为空。知道为什么吗?我在64倍的机器上运行Excel2007,所以我将项目构建更改为x86,但它仍然无法工作。想法

Public Class Records

Dim excel_app As Excel.Application
Dim workbook As Excel.Workbook
Dim sheet_name As String
Dim sheet As Excel.Worksheet
Dim ColumnCount, RowCount, TotalCellCount As Long
Dim yearstamp As String = _
    DateTime.Now.ToString("yyyy")
Dim exeDir As New IO.FileInfo(Reflection.Assembly.GetExecutingAssembly.FullName)
Dim xlPath = IO.Path.Combine(exeDir.DirectoryName, "Records.xlsx")

Public Function QueryExcel(ByVal sheet As String) As DataTable
    'use this connection string for .xlsx files
    Dim cs2007 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=@FILENAME;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"

    'use this connection string for .xls files
    Dim cs2003 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=@FILENAME;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

    Dim sql As String = String.Format("SELECT * FROM [{0}$]", sheet)
    Dim cs = cs2007.Replace("@FILENAME", IO.Path.Combine(exeDir.DirectoryName, "Records.xlsx"))
    'get contents of xls file
    Using cnn As New OleDb.OleDbConnection(cs)
        Using cmd As New OleDb.OleDbCommand(sql, cnn)
            Dim t As New System.Data.DataTable
            Try
                cnn.Open()
                t.Load(cmd.ExecuteReader)
            Catch ex As Exception
                'handle exception. in this case i'm just returning an empty table
            End Try
            Return t
        End Using
    End Using
End Function
Private Sub Records_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim t2013 = QueryExcel("2013")
    DataGridView1.DataSource = t2013

End Sub

您是否尝试过检查应用程序是否正在运行异常?另外,您实际上不需要为.xlsx和.xls使用不同的连接字符串,因为
cs2007
将适用于.xlsI。我这里有一个第一次出现的异常“Dim t as New System.Data.DataTable Try cnn.Open()t.Load(cmd.ExecuteReader)Catch ex As Exception’handle Exception。在这种情况下,我只是返回一个空表End Try Return t“但是,网格仍然会弹出(虽然是空的)你能发布异常消息吗?”网格弹出的原因是显示它的命令行在try-catch语句之外,它为空的原因是由于异常导致表为空。“发生了类型为“System.InvalidCastException”的第一次意外异常”我不确定空白网格显示是因为TestCcatch语句,因为我改变了语句来显示一个MSGBOX,如果失败,它会说失败,但它没有。但是,唉,我决定再次抛弃OLEDB方法,坚持我的单元导入循环,因为OLEDB还没有为我工作过。现在,我只是想弄清楚如何在选项卡控件的多个选项卡上使用相同的datagridview,但要在datagridview中更新信息,以显示信息是不同的