【问题标题】:The Microsoft Jet database engine could not find the object 'Sheet1$'Microsoft Jet 数据库引擎找不到对象“Sheet1$”
【发布时间】:2012-04-13 08:57:58
【问题描述】:

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

但是我收到以下错误:

Microsoft Jet 数据库引擎找不到对象“Sheet1$”。 确保对象存在并且拼写它的名称和路径 正确命名。

这是我正在使用的代码的 sn-p:

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

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

【问题讨论】:

  • 使用绝对路径尝试一次:Data Source=C:\\myexcel.xls;
  • @AshwiniVerma filepath 是绝对路径,因为我使用的是Server.MapPath()
  • 访问此链接并尝试通过编程获取工作表名称:forums.asp.net/t/1751143.aspx/1
  • @Dante 是的,文件没有存储在正确的位置。 stackoverflow.com/a/10139665/370103 我预计这种情况会出现不同的错误消息!无论如何感谢您的帮助。

标签: asp.net oledb xls


【解决方案1】:

我找到了问题。

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

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

【讨论】:

    【解决方案2】:

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

    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.
    

    【讨论】:

    • +1,为什么这被否决了?这完全解决了我的问题。一旦我从文件名中删除了点,它就起作用了。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      不确定,我有一些运行良好的类似代码(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();
          }
      }
      

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          通过此链接编码的 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();
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多