2012-04-13 14 views
8

Ich versuche, eine Tabellenkalkulationsdatei Book1.xls genannt zu lesen, die ein Arbeitsblatt Sheet1

Allerdings erhalte ich die folgende Fehlermeldung genannt enthält:

The Microsoft Jet database engine could not find the object 'Sheet1$'. Make sure the object exists and that you spell its name and the path name correctly.

Hier ist ein Ausschnitt aus dem Code ich verwende:

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 

ich kann nicht verstehen, warum der Code nicht mein Arbeitsblatt finden können. Warum ist das und wie kann ich es lösen?

+0

versuchen Sie es einmal mit absolutem Pfad: Datenquelle = C: \\ myexcel.xls; –

+0

@AshwiniVerma 'Dateipfad' ist der absolute Pfad, weil ich 'Server.MapPath()' – Curt

+0

diesen Link benutze und versuche, Blattname durch Programmierung zu bekommen: http://forums.asp.net/t/1751143.aspx/1 –

Antwort

13

Ich habe das Problem gefunden.

Es scheint, die Tabelle wurde an der falschen Stelle gespeichert, so filepath wurde nicht auf eine Datei, die existiert angezeigt.

Ich habe dies zuerst nicht überprüft, weil ich annahm, dass eine andere Fehlermeldung erscheinen würde. So etwas wie "Book1.xls konnte nicht gefunden werden". Es scheint jedoch, als ob es nicht existiert, dann wird die Nachricht nur sagen, dass es das Arbeitsblatt nicht finden kann.

0

Nicht sicher, ich habe einen ähnlichen Code (C#), das gut funktioniert ...

Vielleicht können Sie einen Unterschied?

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(); 
    } 
} 

Versuchen Sie, Ihr Blatt umzubenennen; oder explizit Spalten hinzufügen; oder prüfen, ob Groß- und Kleinschreibung beachtet wird.

0

Ändern Sie den Speicherort Ihrer Excel-Datei, dieser Fehler wird behoben. können Ihre Datei im selben Ordner abgelegt, wo Ihre Quelle vorhanden

0

beste Lösung durch vb von diesem Link codiert, alle Kredite an diese folks- http://www.vbforums.com/showthread.php?507099-data-from-excel-sheet-to-datagrid-(vb)

C# My erwartete Lösung unter

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(); 
} 
1

Außerdem - vergewissern Sie sich, dass die Datei nicht bereits in Excel geöffnet ist. Sie können die Datei nicht lesen, wenn sie irgendwo anders geöffnet ist. Ich hatte den gleichen Fehler und erkannte, dass ich die Datei in Excel geöffnet hatte.

0

Wenn Dateiname hat zusätzliche Punktzeichen wie unten:

sample.data.csv 

nächste select-Anweisung:

SELECT * FROM [sample.data.csv] 

mit Verbindungszeichenfolge:

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

mit Ausnahme fehlschlagen:

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.