L'analisi di un file di Excel in C #, le cellule sembrano avere tagliato in 255 caratteri ... come faccio a fermare questo?

StackOverflow https://stackoverflow.com/questions/926453

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

È stato utile?

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.

  1. 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.

  2. 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.

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