2012-04-13 2 views
8

« Sheet1 $ » je tente de lire un fichier tableur appelé Book1.xls qui contient une feuille de calcul appelée Sheet1Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet

Cependant, je reçois l'erreur suivante:

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.

Voici un extrait du code J'utilise:

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 

Je ne comprends pas pourquoi le code ne peut pas trouver ma feuille de calcul. Pourquoi est-ce, et comment puis-je le résoudre?

+0

Essayez une fois d'utiliser le chemin absolu: Data Source = C: \\ myexcel.xls; –

+0

@AshwiniVerma 'filepath' est le chemin absolu parce que j'utilise' Server.MapPath() ' – Curt

+0

visitez ce lien et essayez d'obtenir sheetname par programmation: http://forums.asp.net/t/1751143.aspx/1 –

Répondre

13

J'ai trouvé le problème.

Il semble que la feuille de calcul a été enregistrée au mauvais emplacement, donc filepath n'a pas été pointé vers un fichier qui existe.

Je n'ai pas vérifié cela au début parce que je supposais qu'un message d'erreur différent apparaîtrait. Quelque chose comme "Book1.xls n'a pas pu être trouvé". Cependant, il semble que s'il n'existe pas, le message indiquera simplement qu'il ne peut pas trouver la feuille de travail.

0

Je ne sais pas, j'ai un code similaire (C#) qui fonctionne bien ...

Peut-être que vous pouvez repérer une différence?

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

Essayez de renommer votre feuille; ou ajouter explicitement des colonnes; ou vérifier s'il est sensible à la casse.

0

Modifier l'emplacement de votre fichier Excel, cette erreur sera résolue. peut mettre votre fichier dans le même dossier dans lequel la source présente

0

meilleure solution par vb code de ce lien, tous les crédits à ces folks- http://www.vbforums.com/showthread.php?507099-data-from-excel-sheet-to-datagrid-(vb)

C# Ma solution attendue ci-dessous

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

Assurez-vous également que le fichier n'est pas ouvert dans Excel. Vous ne pourrez pas lire le fichier s'il est ouvert ailleurs. J'ai eu la même erreur et j'ai réalisé que le fichier était ouvert dans Excel.

0

Si le nom du fichier a du caractère de point supplémentaire comme ci-dessous:

sample.data.csv 

prochaine instruction select:

SELECT * FROM [sample.data.csv] 

avec chaîne de connexion:

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

échouera à l'exception:

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. 
Questions connexes