12

我正在尝试读取一个名为的电子表格文件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

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

4

6 回答 6

15

我发现了问题。

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

起初我没有检查这个,因为我认为会出现不同的错误消息。诸如“找不到Book1.xls”之类的东西。但是,如果它不存在,那么消息只会声明它找不到工作表。

于 2012-04-13T11:05:48.403 回答
5

如果文件名有额外的点字符,如下所示:

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.
于 2017-01-31T16:56:55.297 回答
1

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

于 2016-03-16T15:24:42.223 回答
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();
    }
}

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

于 2012-04-13T09:06:28.860 回答
0

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

于 2013-11-28T06:02:04.667 回答
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();
}
于 2016-02-06T02:15:09.103 回答