Sto utilizzando OleDB DataReader per ottenere dati dai miei file excel (ma questo problema si verifica anche in DataTable.Fill). Il fatto è che ho una colonna che dovrebbe restituire stringhe. Tutto va bene e funziona, ma di recente è emerso un problema, perché le celle della colonna avevano formati diversi. Alcuni erano in numeri e altri in testo. Quando ho controllato usando dataReader.GetSchema() ha mostrato che la colonna in questione era stata dedotta come tipo System.String. Il problema con questo era che tutte le celle non di testo erano immediatamente impostate su null.Problema di formattazione cella Excel
C'è un modo per suggerire al lettore che quella colonna deve solo analizzare le colonne come System.Object invece di dedurlo come System.String e scaricare tutte le celle non stringa?
La stringa di connessione che sto utilizzando è:
stringa connString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Origine dati =" + filePath + ";" + "Proprietà estese = Excel 8.0;";
e il codice è:
using (OleDbConnection connection = new OleDbConnection(connString))
{
connection.Open();
foreach (string worksheetName in worksheetNames)
{
using (OleDbCommand command =
new OleDbCommand("SELECT * FROM [" + worksheetName + "]", connection))
{
TEntity entity;
using (OleDbDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
entity = GetDataFromDataTable(dataReader);
if (entity != null)
{
entityList.Add(entity);
}
}
}
}
}
connection.Close();
}
Grazie. IMEX ha funzionato. – Jonn
FYI: MaxScanRows = 0 viene ignorato quando si utilizza il provider Microsoft.Jet.OLEDB.4.0; esegue ancora solo la scansione delle prime 8 righe. Il provider Microsoft.ACE.OLEDB.12.0 non sembra soffrire dello stesso problema. Vedere la sezione su _Rows to Scan_ in [KB] (http://support.microsoft.com/default.aspx?scid=kb;en-us;257819) – codechurn