-valori delle celle di Excel vengono troncati da OLE DB provider
-
23-08-2019 - |
Domanda
Sto utilizzando la classe OleDbConnection per recuperare dati da una cartella di lavoro di Excel 2000/2003:
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + filename + ";" +
"Extended Properties=\"Excel 8.0;IMEX=1\";";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
// code to get table name from schema omitted
var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");
Ora si scopre che le cellule nel foglio di lavoro con lunghezza maggiore di 255 caratteri vengono troncati. Si tratta di una limitazione nel Microsoft.Jet.OLEDB-fornitore, o c'è qualcosa che posso fare?
Chiunque?
Soluzione
Il provider OLE DB per Excel tenterà di determinare automaticamente i tipi di dati in base al largo dei primi 8 righe di dati, questo può essere impostato con l'HDR = Yes / No proprietà nella stringa di connessione. Inoltre, ci sono diversi tipi che si può applicare al testo colonne. Il tipo memo detiene oltre 255 caratteri, quindi se nessuno dei primi 8 righe hanno che poi sarà impostato correttamente il tipo di dati.
Il modo per cambiare questo è modificando un'impostazione del Registro chiamato TypeGuessRows, come descritto qui: Microsoft Support
NOTA: L'intervallo valido di valori per la chiave TypeGuessRows è da 0 a 16. Tuttavia, se il valore è 0, il numero di righe di origine digitalizzata è 16384. Quindi, se avete un file molto grande assicurarsi che i più grandi righe sono prima.
Altri suggerimenti
OleDBAdapter Excel QA ho postato tramite pila trabocco.
I popolato una cella del foglio di lavoro (Righe [0] [4]) w / 445 caratteri e ha funzionato bene ... Aggiungere questo al fine del codice per l'ouput
// DataSet:
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2];
Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4];
string rowZeroColumn3 = row0Col3.ToString();
string rowZeroColumn4 = row0Col4.ToString();
Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);