Vb.net Can';t让ACE.OLEDB在datagridview中显示excel文件
在下面的代码中,我试图使用OLE.DB将Excel文件加载到datagridview中。程序运行,但datagridview仍然为空。知道为什么吗?我在64倍的机器上运行Excel2007,所以我将项目构建更改为x86,但它仍然无法工作。想法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
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中更新信息,以显示信息是不同的