C sharp - Leer una celda de Excel con formato de número

   
Vista:

Leer una celda de Excel con formato de número

Publicado por Leonardo Josué (25 intervenciones) el 13/11/2008 16:32:48
Hola a todos los foristas, tengo un gran problema, pero espero que alguno de ustedes me pueda ayudar:

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:
//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();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Leer una celda de Excel con formato de número

Publicado por Yamil Bracho (1111 intervenciones) el 13/11/2008 17:08:45
En vez de usar Value usa Text. No se si Rango tenga esta propiedad pero puedes recorrer las celdas de un rango
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una celda de Excel con formato de número

Publicado por Leonardo Josué (25 intervenciones) el 13/11/2008 17:28:54
Muchas Gracias Yamil, es correcta tu respuesta, utilizando la propiedad Text recupero el valor sin que me haga la conversión a Númeto

Gracias de Nuevo y saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una celda de Excel con formato de número

Publicado por Gerardo MR (1 intervención) el 08/01/2009 02:09:48
// Asumiendo que tu variable Valor en el ejemplo anterior es de tipo string...
object celda;
celda = Rango.get_Value(Missing.Value);
Valor = celda.ToString();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una celda de Excel con formato de número

Publicado por rodriguezjp (1 intervención) el 14/01/2010 15:31:04
Hola Leonardo,

¿Podais enviarme el código si al final te funcionó?
Tengo el mismo problema.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una celda de Excel con formato de número

Publicado por Leonardo Josue (25 intervenciones) el 14/01/2010 18:09:54
Qué tal rodriguezjp... la verdad este problema se me presentó hace bastante tiempo y lamentablemente ya no tengo el código, pero si no mal recuerdo, tal como dijo Yamil el único detalle está en recuperar el valor de la celda con la propiedad text... yo estaba utilizando la propiedad value2, pero esta no recuperaba los códigos correctamente... entonces debería quedar algo como esto:

//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.text /*********Aquí se recupera el valor como texto**************/
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();
}

Espero que te pueda servir de algo. Saludos

Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer una celda de Excel con formato de número

Publicado por Carlos A. (1 intervención) el 03/05/2013 20:49:34
Que reata Text era la solcion cuando es vacio !!! con tostring truena la pendejes!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar