Estoy usando el DataReader OleDB para obtener datos de mis archivos de Excel (pero este problema también ocurre en DataTable.Fill). El caso es que tengo una columna que debería devolver cadenas. Todo está bien y funciona, pero recientemente surgió un problema, porque las celdas de la columna tenían diferentes formatos. Algunos estaban en números y otros en texto. Cuando revisé usando dataReader.GetSchema() mostró que la columna en cuestión se dedujo como tipo System.String. El problema con esto era que todas las celdas que no eran de texto se configuraron inmediatamente como nulas.Problema de formato de celda de Excel
¿Hay alguna manera de sugerir al lector que esa columna solo debe analizar las columnas como System.Object en lugar de inferirlo como System.String y eliminar todas las celdas que no sean cadenas?
La cadena de conexión que estoy usando es:
cadena connString = "Provider = Microsoft.Jet.OleDb.4.0;" + "Origen de datos =" + filePath + ";" + "Propiedades extendidas = Excel 8.0;";
y el código es:
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();
}
Gracias. IMEX funcionó. – Jonn
FYI: MaxScanRows = 0 se ignora cuando se utiliza el proveedor Microsoft.Jet.OLEDB.4.0; aún solo escanea las primeras 8 filas. El proveedor Microsoft.ACE.OLEDB.12.0 no parece sufrir el mismo problema. Consulte la sección sobre _Filas para escanear_ en [KB] (http://support.microsoft.com/default.aspx?scid=kb;en-us;257819) – codechurn