1
我一直在試圖上傳和讀取Excel文件(.xls或.xlsx)格式問題在VB.net
我使用此代碼upploading成功地讀取Excel文件:
Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
Dim filepath As String = ""
If FileUpload1.HasFile Then
Try
Dim filename As String = FileUpload1.PostedFile.FileName
Dim extension = (filename.Substring(filename.LastIndexOf("."), (filename.Length() - filename.LastIndexOf("."))))
If extension = ".xlsx" Or extension = ".xls" Then
filepath = "\" & Common.toUnix(Now) & "_" & filename
FileUpload1.SaveAs(Server.MapPath("~/") & filepath)
' ==== NOW READ THE FILE
Else
StatusLabel.InnerText = "Only Excel file types are accepted (.xls/.xlsx)<br> File Uploaded had extension: " & extension
End If
Catch ex As Exception
StatusLabel.InnerText = "Upload status: The file could not be uploaded. The following error occured: " + ex.ToString()
End Try
End If
End Sub
它上傳OK,不過嘗試讀取文件時,我得到這個錯誤:
System.Data.OleDb.OleDbException (0x80004005): The Microsoft Jet database engine cannot open the file ''. It is already opened exclusively by another user, or you need permission to view its data.
我使用代碼來讀取與此類似:
vb.net traversing an xls/xlsx file?
因此連接如下:
Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0" & _
";Data Source=" & ExcelFile & _
";Extended Properties=Excel 8.0;"
Dim conn As OleDbConnection = Nothing
Dim dt As System.Data.DataTable = Nothing
Dim excelDataSet As New DataSet()
Try
conn = New OleDbConnection(connString)
conn.Open() '<<< ERROR IS RAISED ON THIS LINE
dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
If dt Is Nothing Then
Return Nothing
End If
Dim excelSheets(dt.Rows.Count) As String
Dim i As Integer = 0
For Each row As DataRow In dt.Rows
excelSheets(i) = row("payments").ToString
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
If i = SheetNumber Then
Exit For
End If
Next
..................
我上傳到共享服務器所以不必控制以權限這樣,但我已讀/寫權限和上傳圖片工作正常,但它正在讀取我無法工作的文件。
注意
此錯誤與.xls文件時,使用的.xlsx,當我得到這個錯誤:
System.Data.OleDb.OleDbException (0x80004005): Cannot update. Database or object is read-only. at System.Data.OleDb.OleDbConnectionInternal
在這條線會出現此錯誤:
For Each row As DataRow In dt.Rows
所以它似乎是uplpoading和打開文件確定,但不能讀取行....
我不確定爲什麼會發生這種情況!
任何幫助將不勝感激!
如果你想讀'xlsx'文件,您需要使用ACE OLEDB提供程序。試試這個連接字符串'Provider = Microsoft.ACE.OLEDB.12.0; Data Source = myFile.xlsx; Extended Properties =「」Excel 12.0 Xml; IMEX = 1; HDR = YES;「」'對於xls文件,提供者= Microsoft.ACE.OLEDB.12.0;數據源= myFile.xls;擴展屬性=「」Excel 8.0; IMEX = 1; HDR = YES;「」' –
好吧,試過了,我正在創建'微軟'。 ACE.OLEDB.12.0'提供程序沒有在本地計算機上註冊,這是我無法控制的共享服務器,我不能用這個做很多事情嗎?我找不到要下載的.dll文件,只有Microsoft提供的EXE文件,我只能在本地安裝。 –