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?

È stato utile?

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);           
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top