Domanda

Sto provando a leggere un file Excel (xlsx) utilizzando il codice mostrato di seguito.Ottengo una "tabella esterna non è nel formato previsto". Errore a meno che non abbia il file già aperto in Excel.In altre parole, devo prima aprire il file in Excel prima di poterlo leggere dal mio programma C#.Il file xlsx si trova su una condivisione sulla nostra rete.Come posso leggere il file senza doverlo prima aprire?Grazie

string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
    DataSet ds = new DataSet();
    adaptor.Fill(ds);
}
È stato utile?

Soluzione

"tabella esterna non è nel formato previsto." si verifica in genere quando si tenta di utilizzare un file di Excel 2007 con una stringa di connessione che utilizza: Microsoft.Jet.OLEDB.4.0 ed Extended Properties = Excel 8.0

Utilizzando la seguente stringa di connessione sembra risolvere gran parte dei problemi.

public static string path = @"C:\src\RedirectApplication\RedirectApplication\301s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

Altri suggerimenti

Grazie per questo codice :) I really appreciate it. Funziona per me.

public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

Quindi, se avete la versione diff di file di Excel, ottenere il nome del file, se la sua estensione è .xlsx , utilizzare questo:

Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

e se è .xls , uso:

Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""

(ho troppo bassa reputazione di commentare, ma questo è un commento sull'ingresso della JoshCaba, utilizzando l'Ace-motore invece di Jet per Excel 2007)

Se non avete installato Ace / registrato sul vostro computer, si può arrivare a: https://www.microsoft.com/en-US/download/details.aspx?id=13255

Si applica per Excel 2010 pure.

Basta aggiungere il mio caso. Il mio file xls è stato creato da una funzione di esportazione dei dati da un sito web, il file di estensione è xls, può essere normalmente aperto da MS Excel 2003. Ma sia Microsoft.Jet.OLEDB.4.0 e Microsoft.ACE.OLEDB.12.0 ottenuto un " tabella esterna non è nel formato previsto un'eccezione".

Infine, il problema è, proprio come ha detto l'eccezione, "non è nel formato previsto". Anche se il suo nome estensione è xls, ma quando l'ho aperto con un editor di testo, in realtà è un file html ben formato, tutti i dati sono in un

, ogni è una riga e ogni
è un cellula. Poi credo di poter analizzare in modo html.

Ho riscontrato lo stesso problema (utilizzando ACE.OLEDB) e ciò che lo ha risolto per me è stato questo collegamento:

http://support.microsoft.com/kb/2459087

Il nocciolo della questione è che l'installazione di più versioni di Office e di vari sdk di Office, assiemi, ecc.aveva portato il riferimento ACEOleDB.dll nel registro a puntare alla cartella OFFICE12 anziché a OFFICE14 in

C:\Programmi\File comuni\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

Dal collegamento:

In alternativa, puoi modificare la chiave di registro cambiando il percorso della dll in modo che corrisponda a quello della tua versione di Access.

Access 2007 dovrebbe utilizzare Office12, Access 2010 - Office14 e Access 2013 - Office15

(sistema operativo:Ufficio a 64 bit:64 bit) o ​​(sistema operativo:Ufficio a 32 bit:32 bit)

Chiave:HKCR\CLSID{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\

Nome valore:(Predefinito)

Dati valore:C: Programmi File comuni Microsoft condiviso Office14 aceoledb.dll

(sistema operativo:Ufficio a 64 bit:32 bit)

Chiave:HKCR\Wow6432Node\CLSID{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\

Nome valore:(Predefinito)

Dati valore:C: Programmi (x86) File comuni Microsoft condiviso Office14 aceoledb.dll

Ho visto anche questo errore quando si tenta di utilizzare complessi INDIRETTI formule () sul foglio che viene importato. Ho notato che questo perché questa è stata l'unica differenza tra due cartelle di lavoro in cui uno è stato l'importazione e l'altro no. Entrambi erano 2007+ .xlsx, ed è stato installato il motore di 12.0.

Ho confermato che questo era il problema:

  • Fare una copia del file (aveva ancora il problema, quindi non era un po 'Salva-come differenza)
  • La selezione di tutte le celle nel foglio con le formule indiretti
  • Incolla come valori solo

e l'errore è scomparso.

mi è stato sempre gli errori con terze parti e la lettura di una cartella di lavoro Oledb XLSX. Il problema sembra essere un foglio di lavoro nascosto che causa un errore. Unhiding il foglio di lavoro ha permesso la cartella di lavoro da importare.

Ho avuto lo stesso problema. che, come deliberato utilizzando questi passaggi:

1.) Fare clic su File

2.) Selezionare "salva con nome"

3.) Fare clic sul menu a discesa (Salva come tipo)

entrare descrizione dell'immagine qui

4.) Selezionare Excel 97-2003

entrare descrizione dell'immagine qui

5). Fare clic sul pulsante Salva

entrare descrizione dell'immagine qui

Ho avuto questo problema e modifica delle proprietà estese in HTML Importa riparato come per questo post da Marcus Miris:

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & importedFilePathAndName _
         & ";Extended Properties=""HTML Import;HDR=No;IMEX=1"";"

Invece di OleDb, è possibile utilizzare l'Excel Interop e aprire il foglio di lavoro come di sola lettura.

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.open (v = office.15) aspx

incontrato lo stesso problema e abbiamo trovato questo thread. Nessuno dei suggerimenti di cui sopra ha aiutato ad eccezione di commento di @ Smith alla risposta accettata il 17 apr '13.

Lo sfondo del mio problema è abbastanza vicino a @ zhiyazw di - fondamentalmente cercando di impostare un file di Excel esportato (SSRS nel mio caso) come fonte di dati nel pacchetto dtsx. Tutto quello che ho fatto, dopo un po 'armeggiare intorno, è stato rinominando il foglio di lavoro. Non deve essere minuscole come @Smith ha suggerito.

Suppongo ACE OLE DB si aspetta che il file Excel di seguire una certa struttura XML ma in qualche modo Reporting Services non è a conoscenza di questo.

Questo indirizzo del file di excel può avere un'estensione non corretta. È possibile modificare l'estensione da xls a xlsx o viceversa e riprovare.

Se il file è di sola lettura, basta rimuoverlo e dovrebbe funzionare di nuovo.

il file potrebbe essere bloccato da un altro processo, è necessario copiarlo poi caricarlo come si dice in questo Post

Questo può anche essere un file che contiene le immagini o grafici, vedere questo: http://kb.tableausoftware.com/articles/knowledgebase/resolving-error-external-table-is-not-in-expected-format

La raccomandazione è quella di salvare come Excel 2003

Basta aggiungere la mia soluzione a questo problema. Stavo caricando un file .xlsx al server web, quindi la lettura da esso e di massa inserendo a SQL Server. È stato sempre lo stesso messaggio di errore, provato tutte le risposte suggerite, ma nessuno ha funzionato. Alla fine ho salvato il file come Excel 97-2003 (.xls), che ha lavorato ... unico problema che ho ora è che il file originale aveva 110,000+ righe.

Se avete ancora questo problema, quindi controllare le autorizzazioni, ho provato molti di questi suggerimenti e il mio problema concreto era che il file che volevo processo era sotto il controllo di origine e il filo non aveva i permessi, ho dovuto cambiare la interi autorizzazioni per le cartelle e ha iniziato a lavorare (stavo elaborando molti file in là) ... si abbina anche molti suggerimenti come cambiare il nome del file o verificare che il file non è loicked da un altro processo.

Spero che ti aiuta.

ACE è superata JET

Ace supporta tutte le versioni precedenti di Office

Questo codice funziona bene!

        OleDbConnection MyConnection;
        DataSet DtSet;
        OleDbDataAdapter MyCommand;

        MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\\Book.xlsx;Extended Properties=Excel 12.0;");
        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
        DtSet = new System.Data.DataSet();

        MyCommand.Fill(DtSet);
        dataGridView1.DataSource = DtSet.Tables[0];
        MyConnection.Close();

Questo può verificarsi quando la cartella di lavoro è protetto da password. Ci sono alcune soluzioni per rimuovere questa protezione, ma la maggior parte degli esempi che troverete on-line non sono aggiornati. In entrambi i casi, la soluzione più semplice è quella di rimuovere la protezione della cartella di lavoro manualmente, altrimenti usare qualcosa come OpenXML per rimuovere la protezione a livello di codice.

Recentemente ho visto questo errore in un contesto che non corrisponde a nessuna delle risposte elencate in precedenza. Si è scoperto essere un conflitto con AutoVer . Soluzione:. Disattivare temporaneamente AutoVer

Recentemente ho avuto questa "System.Data.OleDb.OleDbException (0x80004005): tabella esterna non è nel formato previsto." Errore di verifica. Contavo su Microsoft Access 2010 Runtime. Prima di aggiornamento che è stato installato automaticamente sul mio server on 12 dicembre 2018 il mio codice C # funzionato benissimo usando fornitore Microsoft.ACE.OLEDB.12.0. Dopo l'aggiornamento dal 12 Dicembre 2018 è stato installato ho cominciato ad avere la “tabella esterna non è nel formato previsto" nel mio file di log.

I mollato il Microsoft Access 2010 Runtime e installato il Microsoft Access 2013 Runtime e il mio codice C # cominciato a lavorare di nuovo con no "System.Data.OleDb.OleDbException (0x80004005):. Tabella esterna non è nel formato previsto" errori.

2013 versione che risolto questo errore per me https://www.microsoft.com/en-us/ download / confirmation.aspx? id = 39358

versione 2010 che ha lavorato per me prima di questo aggiornamento che è stato installato automaticamente sul mio server il 12 dicembre. https://www.microsoft.com/en-us/ download / confirmation.aspx? id = 10910 https://www.microsoft.com/en-us/ download / confirmation.aspx? id = 10910

Inoltre ho avuto questo errore verificarsi il mese scorso in un processo automatizzato. Il codice C # funzionato benissimo quando ho eseguito il debug. Ho scoperto che l'account di servizio che esegue il codice di permessi anche necessarie per il C:. Cartella \ Windows \ Temp

Il mio scopo è costituito da template scaricare e verifica del modello quando è riempito con i dati Così,

1) Scarica un modello (.xlsx) file con la riga di intestazione. il file viene generato utilizzando OpenXML ed è perfettamente funzionante.

2) Carica lo stesso file senza alcun cambiamento da esso è stato scaricato. Ciò causerà un errore di connessione e non riesce (connessione OLEDB utilizza per la lettura del foglio Excel).

Qui se i dati si riempie il programma funziona come previsto.

Qualcuno ha un'idea la questione è collegata con il file che stiamo creando è in XML formato se lo apriamo e basta salvare convertirlo a formato Excel e funziona bene.

Qualche idea per scaricare l'excel con il tipo di file preferito?

Lavorare con un codice più vecchio e sono imbattuto in questo stessa eccezione generica. Molto difficile da rintracciare il problema, così ho pensato che vorrei aggiungere qui nel caso in cui aiuta a qualcun altro.

Nel mio caso, c'era il codice in altre parti del progetto che è stato aprendo una StreamReader sul file Excel prima l'OleDbConnection tentato di aprire il file (questo è stato fatto in una classe base).

Quindi, in pratica ho solo bisogno di chiamare Close() sull'oggetto StreamReader prima, quindi ho potuto aprire la connessione OleDb successo. Non aveva niente a che fare con il file di Excel stesso, o con la stringa OleDbConnection (che è naturalmente in cui stavo cercando in un primo momento).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top