L'analisi di un file di Excel in C #, le cellule sembrano avere tagliato in 255 caratteri ... come faccio a fermare questo?
-
06-09-2019 - |
Domanda
Sto parsing attraverso un file caricati Excel (xlsx) in asp.net con C #. Sto usando il seguente codice (semplificato):
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };
Questo funziona perfettamente, ma se c'è qualcosa di più lungo di 255 caratteri nella cella, otterrà tagliato fuori. Qualsiasi idea di cosa sto facendo male? Grazie.
EDIT:. Quando si visualizza il foglio di Excel, si mostra molto di più di 255 caratteri, quindi non credo che il foglio stesso è limitato
Soluzione
Proprio da un rapido Googling del soggetto, sembra che questo è un limite di Excel.
Modifica : possibile soluzione (purtroppo in VB)
Altri suggerimenti
La soluzione!
Sono stato combattendo questo anche oggi. Finalmente ho potuto farlo funzionare modificando alcune chiavi di registro prima che l'analisi del foglio di calcolo Excel.
È necessario aggiornare questa chiave di Registro di sistema prima analisi del foglio di calcolo Excel:
// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\
// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\
Cambia TypeGuessRows
a 0
e ImportMixedTypes
a Text
in questa chiave. Avrete anche bisogno di aggiornare la stringa di connessione per includere IMEX=1
nelle proprietà estese:
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");
Riferimenti
http: //blogs.vertigo.com/personal/aanttila/Blog/archive/2008/03/28/excel-and-csv-reference.aspx
http://msdn.microsoft.com/en-us/library/ ms141683.aspx
... caratteri potrebbero essere troncati. Per importare dati da una colonna memo senza troncamento, è necessario assicurarsi che la colonna memo in almeno una delle righe campione contiene un valore più di 255 caratteri, oppure è necessario aumentare il numero di righe da campionate il conducente di includere una tale fila. può aumentare il numero di righe campionata aumentando il valore di TypeGuessRows sotto la HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel chiave di registro ....
Ho imbattuto in questo, e la soluzione che ha funzionato per me è stato quello di spostare le celle con testo lungo per la parte superiore del foglio di calcolo.
Ho trovato questo commento in un forum che descrive il problema
Questo è un problema con il provider OLE DB Jet. Esso esamina i primi 8 file
del foglio per determinare il tipo di dati in ogni colonna. Se la colonna fa
non contiene un valore di campo oltre 256 caratteri nei primi 8 f , quindi assume la
tipo di dati è il testo, che ha un limite di caratteri di 256. Il seguente articolo KB è
Di Più Informazioni su questo tema: http://support.microsoft.com/kb/281517
Spero che questo aiuto qualcun altro!
Hai provato l'impostazione del tipo di dati colonne di testo all'interno del foglio elettronico? Credo che facendo questo permetterà alle cellule di contengono molto più di 255 caratteri.
[Modifica] Per quel che vale questa finestra con MS- squadra Excel è una lettura interessante. Nella sezione commenti in fondo ottengono in alcune discussioni circa che 255 cutoff. Dicono Excel 12 può supportare 32k caratteri per cella.
Se questo è vero ci deve essere un modo per ottenere a questi dati. Ecco due cose da considerare.
-
In passato ho usato l'opzione "IMEX = 1" nella mia stringa di connessione per affrontare colonne contenenti dati misti mostrando come vuoto. E 'un Longshot, ma si potrebbe dare che una prova.
-
Può esportare il file in un delimitato da tabulazioni file flat? IMHO questo è il modo più affidabile di trattare con dati di Excel, dal momento che Excel non ha così tanti grattacapi.
SpreadsheetGear per NET in grado di leggere e scrivere (e più) xls e xlsx cartelle di lavoro e sostiene lo stesso limitazioni di Excel per il testo - in altre parole, sarà solo di lavoro. V'è una valutazione gratuita, se si vuole fare un tentativo.
Disclaimer: possiedo SpreadsheetGear LLC
Per quanto riguarda l'ultimo post, ho anche utilizzare SpreadsheetGear e scoprire che soffre anche i 255 caratteri per la limitazione delle cellule durante la lettura dal XLS vecchio (non XLSX) formato.