Microsoft Jet数据库引擎找不到对象'Sheet1 $'

Cur*_*urt 11 asp.net oledb xls

我正在尝试阅读一个名为的电子表格文件Book1.xls,其中包含一个名为的工作表Sheet1

但是我收到以下错误:

Microsoft Jet数据库引擎找不到对象'Sheet1 $'.确保对象存在,并正确拼写其名称和路径名称.

这是我正在使用的代码片段:

Dim dt As DataTable = New DataTable()
Select Case fileExt
    Case ".csv"
        Dim reader As New CsvReader
        dt = reader.GetDataTable(filePath)
    Case ".xls", ".xlsx"

        Dim oleDbConnStr As String
        Select Case fileExt
            Case ".xls"
                oleDbConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"""
            Case ".xlsx"
                oleDbConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=2"""
        End Select



        Using oleDbConn As OleDbConnection = New OleDbConnection(oleDbConnStr)
            oleDbConn.Open()

            Dim oleDbCmd As New OleDbCommand("SELECT * FROM [Sheet1$]", oleDbConn)
            Dim oleDbDa As New OleDbDataAdapter(oleDbCmd)
            oleDbDa.Fill(dt)

            oleDbConn.Close()
        End Using



End Select
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么代码找不到我的工作表.为什么会这样,我该如何解决?

Cur*_*urt 14

我发现了这个问题.

似乎电子表格被保存到错误的位置,因此filepath没有指向存在的文件.

我最初没有检查这个,因为我假设会出现一个不同的错误消息.像"Book1.xls"找不到的东西.但是,如果它不存在,那么该消息将只是声明它找不到工作表.


vol*_*ody 5

如果文件名有如下附加点字符:

sample.data.csv
Run Code Online (Sandbox Code Playgroud)

下一个选择语句:

SELECT * FROM [sample.data.csv]
Run Code Online (Sandbox Code Playgroud)

带连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Data\"; Extended Properties="text;HDR=Yes;Format=Delimited;";
Run Code Online (Sandbox Code Playgroud)

将失败,但异常:

Additional information: The Microsoft Jet database engine could not find the object 'sample.data.csv'.  Make sure the object exists and that you spell its name and the path name correctly.
Run Code Online (Sandbox Code Playgroud)