我正在尝试将Excel工作表导入datagridview,但我遇到了错误:“数据库或对象是只读的。”但是,我正在引用的工作簿没有应用只读属性。话虽这么说,如果我的应用程序正在运行,我正在连接的工作簿已经打开,所以我怀疑这就是我遇到这个错误的原因。工作簿是打开的,因此在尝试填充数据集时系统显示为只读。
我在这个假设中是对的吗?如果我正在连接的工作簿是打开的,那么他们是否可以使用OleDB连接将Excel工作表导入datagridview?如果没有,是否有任何其他方法来填充此datagridview而不必在我的工作表中进行大量循环?我的代码如下:
Try
'connect to Excel data source and set gridview equal to dataset (entire sheet should be visible in gridview)
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & StatVar.workbookName & ";Extended Properties=""Excel 12.0;HDR=YES;Readonly=False"";" 'may need to use different MS provider and lower OLEDB for .xls files (Microsoft.Jet.OLEDB4.0...Excel 8.0) kind of sketchy though
MyConnection = New System.Data.OleDb.OleDbConnection(connstring) 'create a new data connection to Excel data source
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Budget$]", MyConnection) 'query the sheet - select all data
MyCommand.TableMappings.Add("Table", "Table") 'map data selection as table
StatVar.DtSet1 = New System.Data.DataSet 'create new data set
MyCommand.Fill(StatVar.DtSet1) 'fill data set with table
Form14.DataGridView1.DataSource = StatVar.DtSet1.Tables(0) 'populate gridview with data set table
MyConnection.Close()
Form14.ShowDialog()
Catch exc As Exception
MessageBox.Show("There was a problem loading this database. Please contact an administrator if the problem continues." & vbNewLine & vbNewLine & "Error: " & exc.Message)
End Try
我在这里遇到错误:
MyCommand.Fill(StatVar.DtSet1)
答案 0 :(得分:1)
你有没有尝试更改connstring;设置ReadOnly = True
如果这不起作用,您可以制作工作簿的副本,然后查询该副本。如果你这样做,它会获得上次保存的工作簿。如果这是一个问题,您可以在复制前对打开的工作簿进行保存。
或者更好的是,只需要求用户在运行代码之前关闭工作簿。
答案 1 :(得分:1)
Try
Cursor = Cursors.WaitCursor
'can't populate gridview with an open file using OLEDB - need to export the Budget sheet to a new file, close it, connect with OLEDB, then delete the temp Budget.xls file just created
'copy Budget sheet to new workbook, delete unneeded columns, save file as Budget.xls, close workbook
Dim filenm = "W:\TOM\ERIC\Budget Temp\Budget.xls"
StatVar.xlApp.Sheets("Budget").Copy()
StatVar.xlApp.ActiveWorkbook.Sheets("Budget").Columns("C:DY").Delete()
StatVar.xlApp.ActiveWorkbook.SaveAs("W:\TOM\ERIC\Budget Temp\Budget.xls")
StatVar.xlApp.ActiveWorkbook.Close(True)
'connect to Excel data source and set gridview equal to dataset (entire sheet should be visible in gridview)
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & filenm & ";Extended Properties=""Excel 12.0;HDR=YES;Readonly=False"";" 'may need to use different MS provider and lower OLEDB for .xls files (Microsoft.Jet.OLEDB4.0...Excel 8.0) kind of sketchy though
MyConnection = New System.Data.OleDb.OleDbConnection(connstring) 'create a new data connection to Excel data source
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Budget$A:F]", MyConnection) 'query the sheet - select all data in columns A:F
MyCommand.TableMappings.Add("Table", "Table") 'map data selection as table
StatVar.DtSet1 = New System.Data.DataSet 'create new data set
MyCommand.Fill(StatVar.DtSet1) 'fill data set with table
Form14.DataGridView1.DataSource = StatVar.DtSet1.Tables(0) 'populate gridview with data set table
MyConnection.Close()
'delete temporary Budget.xls file created at beginning of procedure and show Budget Codes form
File.Delete(filenm)
Form14.TxtBoxAutoCode.Text = StatVar.xlApp.Sheets("Budget").Range("EU2").Text
Form14.ShowDialog()
Catch exc As Exception
MessageBox.Show("There was a problem loading this database. Please contact an administrator if the problem continues." & vbNewLine & vbNewLine & "Error: " & exc.Message)
Finally
Cursor = Cursors.Default
End Try