2011-03-22 28 views
5

He intentado leer datos de un archivo de Excel. Ha sido exitoso, pero encontré un problema. Cada vez que el formato de la celda y los datos introducidos en la célula no coincide entonces consigo datos vacíosLeer datos de Excel


por ejemplo

Si la celda de datos tiene el formato de fecha - dd/mm/yyyy, y entra al usuario 13/17/2011 , como el formato de fecha y la fecha ingresados ​​son contradictorios, por lo que el Excel me da una celda completamente vacía. Solo si el formato de la celda es texto, obtengo los datos ingresados.

¿Por qué el archivo de Excel me da una celda vacía en caso de que el formato de fecha introducido no cumpla con el formato de celda?

Este es el código que lee el Excel de datos

if(fileEXT.Equals(".xls")) 
{ 
    oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 8.0"); 
} 
else if(fileEXT.Equals(".xlsx")) 
{ 
    oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=\"Excel 12.0;HDR=YES;\""); 
} 
else if(fileEXT.Equals(".xlsm")) 
{ 
    oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 12.0 Macro"); 
} 

oledbConn.Open(); 
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn); 
OleDbDataAdapter oleda = new OleDbDataAdapter(); 
oleda.SelectCommand = cmd; 
DataSet ds = new DataSet(); 
oleda.Fill(ds,"LocationDetails"); 
+1

Algunos extractos de código sobre cómo leer realmente la celda serían útiles para encontrar el problema. –

+0

Este es el código que lee los datos de Excel – Rohan

+0

¿cómo se accede a 'ds.Tables [0] .Rows [0] .Cells [0]'? –

Respuesta

2

Puede cambiar la cadena de conexión a

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1" 

HDR = Sí; IMEX = 1

dice Controlador OldDb que datos en columnas en formato diferente.

+2

En realidad, 'IMEX = 1' hace eso (trata todas las columnas como texto, afaik). 'HDR = Yes' es algo no relacionado: indica que la primera fila de la hoja contiene los encabezados de columna en lugar de datos. – Heinzi

0

En lugar de OLEDB, sugeriría usar la biblioteca EPPLus para manejar sus archivos de Excel. Es muy fácil y completo. El paquete Nuget también está disponible para el mismo. http://nuget.org/packages/EPPlus