Foros del Web » Programación para mayores de 30 ;) » .NET »

Detectar vacios en hoja de excel

Estas en el tema de Detectar vacios en hoja de excel en el foro de .NET en Foros del Web. Saludos foro Tengo un sistema que importa un archivo de Excel. Pero necesito validarlo para que no contenga celdas vacías en la totalidad de datos ...
  #1 (permalink)  
Antiguo 12/11/2009, 15:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Detectar vacios en hoja de excel

Saludos foro

Tengo un sistema que importa un archivo de Excel. Pero necesito validarlo para que no contenga celdas vacías en la totalidad de datos del archivo.

Todo lo hacía muy bien, hasta que me encontré con un molesto problema:

Código csharp:
Ver original
  1. string conectar_a_excel = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _archivosClima + filename + ";Extended Properties=Excel 8.0;";            
  2.             OleDbConnection oledb_Conexion = new OleDbConnection(conectar_a_excel);            
  3.             oledb_Conexion.Open();
  4.             //mediante el datatable esquemaTabla se obtiene el nombre de la hoja de excel. posterirmente se almacena en name_table.
  5.             DataTable esquemaTabla = oledb_Conexion.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
  6.             string name_table = esquemaTabla.Rows[0]["TABLE_NAME"].ToString();
  7.             string consulta_excel = "select fecha, brillo_solar, temperatura_maxima, temperatura_minima, precipitacion, humedad_relativa from ["+name_table+"]";
  8.             OleDbCommand oledb_command = new OleDbCommand(consulta_excel, oledb_Conexion);
  9.             OleDbDataAdapter data_adapter = new OleDbDataAdapter(oledb_command);
  10.             data_adapter.Fill(DS);
  11.             oledb_Conexion.Close();
  12.             // hasta este punto, los datos del archivo, se encuentran en el datatable.
  13.  
  14.             //validar espacios en blanco
  15.             Type nulos;            
  16.             for (int i = 0; i < DS.Columns.Count; i++)
  17.             {
  18.                 for (int k = 0; k < DS.Rows.Count ; k++)
  19.                 {
  20.                     nulos = DS.Rows[k][i].GetType();                    
  21.                     if (nulos.ToString() == "System.DBNull")
  22.                     {
  23.                         File.Delete(_archivosClima + filename);
  24.                         total_registros = new string[] {"1",(k + 2).ToString(),(i+1).ToString() };
  25.                         return total_registros;
  26.                     }
  27.                 }                    
  28.             }

Este codigo me funciona muy bien siempre y cuando el archivo de excel sea nuevo y se incluyan los datos respectivos. De esta forma cuando hago el conteo de registros del archivo (DS.Rows.Count) si tengo 100 registros, me toma 100 registros.
Pero si desde el archivo tengo 1000 registros y borro 500, me sigue contando los 1000 anteriores.
En la validación del codigo me toma el dato 501 como system.dbnull, pero el caso es que en el conteo solo me debería aparecer 500 registros para solo validar espacios en blanco antes de la ultima fila.

Si selecciono desde excel desde la celda 501 hasta la 1000 y le digo que las elimine, el sistema vuelve a funcionar y el count me lo hace hasta 500.

CUal es la forma mas recomendable de tratar este tipo de archivos para evitar poner tratas al usuario final?

Agradezco mucho sus respuestas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #2 (permalink)  
Antiguo 26/11/2009, 22:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Detectar vacios en hoja de excel

Puede parecer una simpleza, pero yo recorrería en el For/Next exterior los registros y en el interior las columnas.
No alcanzo a entender qué es lo que haces cuando encuentra un System.DBNull, pero lo que sí es seguro es que no puedes descartar un registro al encontrar uno o más System.DBNull en la misma columna, porque no sabes cuáles son los valores de las adyacentes., en cambio, recorriendo en el interior las columnas, podría ssaber si ese registro debe ser descartado al completar el recorrido encontrando todos System.DBNull.

¿Tiene sentido en tu caso?

Otra opción sería descartar esos valores en el mismo momento de leerlos en la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/11/2009, 07:18
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Detectar vacios en hoja de excel

Tu idea es muy buena.

Pero me quedo con la consulta que me diste en el post anterior.

gracias,.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:29.