2015-04-17 53 views
1

我有一個文件上傳和一個函數來加載GridView中的文件。當我選擇一個excel文件並點擊上傳按鈕時,文件上傳到目錄但在加載時出現以下錯誤。對於.txt文件,它工作正常 enter image description here在xls文件中加載文件錯誤

Private Function UploadCSVFile() As String 
    Try 

     If fileCSV.HasFile Then 
      strFileName = fileCSV.FileName 
      hdnFileName.Value = fileCSV.FileName 
      fileCSV.SaveAs(Server.MapPath(strDirectory) & strFileName) 
      Call LoadData(strFileName)  // Gives error in this function 
      lblImportMsg.Text = "File saved succesfully!" 
     End If 

     Return strFileName 

    Catch ex As Exception 
     lblImportMsg.Text = ex.ToString 
     Return "None" 
    End Try 

End Function 


Private Sub LoadData(ByVal strFileName As String) 
    If Not strFileName = "" Then 
     ds = New DataSet 
     Dim strFilePath As String = Server.MapPath(strDirectory) '& strFileName 
     Dim cnn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilePath & ";Extended Properties=Text;") 
     Dim da As New OleDb.OleDbDataAdapter("Select * from [" & strFileName & "]", cnn) 
     da.Fill(ds) 
     gvFileInfo.DataSource = ds.Tables(0) 
     gvFileInfo.DataBind() 
    End If 
End Sub 
+0

可能重複[如何打開CSV或XLS與Jet OLEDB和實現表鎖?](HTTP: //stackoverflow.com/questions/1578324/how-to-open-a-csv-or-xls-with-jet-oledb-and-attain-table-lock) – Caveman

+0

感謝@Capitan的幫助。但現在它拋出「System.UnauthorizedAccessException:訪問路徑'E:\ Project \ Simpla \ StdUpload \ rules.xlsx'被拒絕。在System.IO .__ Error.WinIOError(Int32 errorCode」。它只發生在.xls文件 – Abdul

+0

但這是另一個問題,也許它是隻讀的,或者運行該應用程序的用戶沒有在該文件夾/文件中的權限? eh,wait!這是一個xls或XLSX?它們是不同的格式!! – Caveman

回答

0

一個xls文件可以被解釋爲一個文本文件,爲CSV文件(文本用逗號)。 但是XLSX不同。如果你想用.zip替換.xlsx,你會看到(winzip,winrar.atc)它有很多內部文件......這是一個Office Open XML SpreadsheetML文件格式。

https://msdn.microsoft.com/en-us/library/dd922181(v=office.12).aspx

要打開XLSX文件,嘗試另一種連接字符串,像這樣:

Dim cnn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Path_to_your_file.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'") 
Dim ds As New DataSet 
Dim da As New OleDb.OleDbDataAdapter("Select * from [Sheet1$]", cnn) 
da.Fill(ds)