Actualmente estoy desarrollando una aplicación en ASP.NET con C# para leer archivos de Excel. Hasta ahora no había tenido ningún problema, ya que en teoría todos los campos de mi archivo Excel deberían tener asignado un formato de celda tipo Texto o General, pero resulta que esto no siempre es así. Para poder leer el archivo Excel estoy haciendo uso de la dll Microsoft.Office.Interop.Excel
En uno de mis archivos de excel existe una columna que puede contener una fecha o una descripción:
A
-----------------------
12/12/2000 <- Formato de Celda = Fecha Corta
01/04/2001 <- Formato de Celda = Fecha Corta
No Especificada <- Formato de Celda = Fecha General
24/12/2001 <- Formato de Celda = Fecha Corta
No Especificada<- Formato de Celda = General
Ahora bien, cuando recupero el valor de la celda en cuestión, para el caso de aquellas celdas que tienen Formato de Celda tipo Fecha me recupera los siguientes valores:
12/12/2000 -> 36872
01/04/2001 -> 36982
24/12/2001 -> 37249
Para recuperar el valor de la celda primeramente me pusiciono en dicha celda (usando un objeto tipo Rango) y recupero su propiedad Value2. Abajo pongo el código completo para leer el archivo
¿Mi pregunta es cómo puedo hacer para recuperar el valor de la celda correctamente sin que me cambie el valor que tiene de origen?
Para leer mi archivo Excel hago lo siguiente:
Código:
Espero que alguno de ustedes me pueda ayudar y de antemano muchas gracias.//Declaración de Variables Excel.Application APexcel = null; Excel.Workbook Libro = null; Excel.Worksheet Hoja = null; Excel.Range Rango = null try { //Para iniciar una instancia de Excel APexcel = new Microsoft.Office.Interop.Excel.Application(); APexcel.Visible = false; //Para abrir el Archivo de Excel Libro = APexcel.Workbooks.Open("c:/Archivo.xlsx", Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Hoja = (Excel.Worksheet)Libro.ActiveSheet; //Me posiciono en la primer celda de mi documento Rango = Hoja.get_Range("A1", "A1"); //Ciclo para recorrer todos los renglones hasta que encuentra una celda vacía Renglon = 1; while (Rango.Value2 != null) { Recupero el valor de la celda Valor = Rango.Value2.ToString(); /* Aquí hago algunas cosas dependiendo del valor de la celda, pero para el ejempo no es necesario ponerlas */ Renglon++; //Me posiciono en la primer celda del siguiente renglón a analizar (A2, A3, A4 etc) Rango = Hoja.get_Range("A" + Renglon.ToString(), "A" + Renglon.ToString()); Rango.Select(); } //Cierro el Libro Libro.Close(Type.Missing, Type.Missing, Type.Missing); } catch (Exception ex) { Error = ex.ToString(); } finally { //Liberar Recursos if (APexcel != null) { APexcel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(APexcel); APexcel = null; } if (Libro != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(Libro); Libro = null; } if (Hoja != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(Hoja); Hoja = null; } if (Rango != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(Rango); Rango = null; } GC.Collect(); }
Leo