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
string conectar_a_excel = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _archivosClima + filename + ";Extended Properties=Excel 8.0;"; oledb_Conexion.Open(); //mediante el datatable esquemaTabla se obtiene el nombre de la hoja de excel. posterirmente se almacena en name_table. DataTable esquemaTabla = oledb_Conexion.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); string name_table = esquemaTabla.Rows[0]["TABLE_NAME"].ToString(); string consulta_excel = "select fecha, brillo_solar, temperatura_maxima, temperatura_minima, precipitacion, humedad_relativa from ["+name_table+"]"; data_adapter.Fill(DS); oledb_Conexion.Close(); // hasta este punto, los datos del archivo, se encuentran en el datatable. //validar espacios en blanco Type nulos; for (int i = 0; i < DS.Columns.Count; i++) { for (int k = 0; k < DS.Rows.Count ; k++) { nulos = DS.Rows[k][i].GetType(); if (nulos.ToString() == "System.DBNull") { File.Delete(_archivosClima + filename); return total_registros; } } }
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.