如何在使用 Oledb 的其他用户使用时读取 excel?
Posted
技术标签:
【中文标题】如何在使用 Oledb 的其他用户使用时读取 excel?【英文标题】:How to read an excel while in use by another user with Oledb? 【发布时间】:2014-04-28 09:54:19 【问题描述】:我在共享驱动器上有一个 excel,我的应用程序正在使用 Oledb 连接将数据从 excel 读取到 DataGridView。
cn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + skuPath + ";Extended Properties=""Excel 12.0;HDR=YES;""")
q1 = "select * from [" + year + "$B4:AM300]"
da = New System.Data.OleDb.OleDbDataAdapter(q1, cn)
Try
cn.Open()
da.Fill(ds, "Table1")
Catch e As OleDb.OleDbException
Dim errorMsg As String
Dim i As Integer
errorMsg = ""
For i = 0 To e.Errors.Count - 1
errorMsg += "Index #" & i.ToString() & ControlChars.Cr _
& "Message: " & e.Errors(i).Message & ControlChars.Cr _
& "NativeError: " & e.Errors(i).NativeError & ControlChars.Cr _
& "Source: " & e.Errors(i).Source & ControlChars.Cr _
& "SQLState: " & e.Errors(i).SQLState & ControlChars.Cr
Next i
End Try
cn.Close()
dt = ds.Tables(0)
当 excel 文件已被其他用户打开时,您会在 excel 中收到此通知:
在这些情况下,我的代码在最后一行返回此错误:
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Additional information: Cannot find table 0.
所以我的理解是,因为文件正在使用中,所以整个连接没有返回任何内容,因此数据表为空。 我找到了几种确定文件是否正在使用的方法,但没有关于如何从正在使用的文件中读取的方法。 是否可以?如果是的话怎么办?
请记住,我只需要读取文件,如果可以始终以只读方式打开它,那就太棒了!
【问题讨论】:
【参考方案1】:你不能。即使您使用 ODBC(只读),您也必须在阅读之前关闭打开的文件。 参考:http://forums.asp.net/t/1083489.aspx?open+a+Microsoft+Jet+OLEDB+4+0+connection+to+excel+file+read+only
【讨论】:
以上是关于如何在使用 Oledb 的其他用户使用时读取 excel?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 OleDb ExecuteScalar 方法在查询 COUNT 时返回 Decimal?
使用OLEDB读取EXCEL数据时,为何读取不到单元格中的时间值,全是1900\1\0