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

时间:2012-04-13 08:57:58

标签: 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

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

6 个答案:

答案 0 :(得分:13)

我发现了问题。

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

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

答案 1 :(得分:3)

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

sample.data.csv

下一个选择声明:

SELECT * FROM [sample.data.csv]

连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Data\"; Extended Properties="text;HDR=Yes;Format=Delimited;";

将失败,但例外:

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.

答案 2 :(得分:1)

另外 - 确保您没有在Excel中打开文件。如果文件在其他地方打开,您将无法读取该文件。我有同样的错误,并意识到我在Excel中打开了文件。

答案 3 :(得分:0)

不确定,我有一些类似的代码(C#)效果很好......

也许你能发现差异?

string connectionString = string.Format(Thread.CurrentThread.CurrentCulture, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;'", excelFilePath);
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection connection = factory.CreateConnection())
{
    connection.ConnectionString = connectionString;
    using (DbCommand command = connection.CreateCommand())
    {
        command.CommandText = @"SELECT [File], [ItemName], [ItemDescription], [Photographer name], [Date], [Environment site] FROM [Metadata$]";
        connection.Open();
        using (DbDataReader dr = command.ExecuteReader())
        {
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    .......
                }
            }
        }
        connection.Close();
    }
}

尝试重命名您的工作表;或明确添加列;或检查它是否区分大小写。

答案 4 :(得分:0)

更改您的Excel文件位置,此错误将得到解决。 可能会将您的文件放在源文件所在的同一文件夹中

答案 5 :(得分:0)

通过此链接编码的vb的最佳解决方案,这些人的所有信用 - http://www.vbforums.com/showthread.php?507099-data-from-excel-sheet-to-datagrid-(vb)

C#我期望的解决方案

string connString = "Driver={Microsoft Excel Driver (*.xls)};READONLY=FALSE;DriverId=790;Dbq=" + "C:\\Users\\BHARAVI\\Documents\\visual studio 2013\\Projects\\ERP\\ERPAutomation\\Assets\\Data\\Data.xls";

OdbcConnection conn = new OdbcConnection(connString);

conn.ConnectionTimeout = 500;
OdbcCommand CMD = new OdbcCommand("SELECT * FROM [Sheet1$]", conn);
OdbcDataAdapter myDataAdaptor = new OdbcDataAdapter(CMD);
DataSet ds = new DataSet();
myDataAdaptor.Fill(ds ,"Sheet1");
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)
{
    loginId = dr["LoginId"].ToString();
    encryptedPassword = dr["PWD"].ToString();
    URL = dr["URL"].ToString();
}