Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/10/2009, 08:06
Avatar de Porlachucha
Porlachucha
 
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
como seleccionar un rango automaticamente usando interop en c#

Hola Foreros
Estoy trabajando con un sistema que necesita validar una entrada de datos que vienen desde su origen en excel.
promero intente leer el archivo que puede tener N filas, Y columnas con ado, pero esto en realidad trae mas problemas que beneficios. (basicamente no puedes confiar en que lea correctamente los datos)

me decante entonces por utiliizar COM, ya que no hay problemas de licencia para instalar dichos componentes en el server en donde se ejecuta la aplicacion.

para esto, ya tengo listo el codigo donde especifico el archivo a leer, y selecciono la hoja de trabajo desde la cual sacare los datos.
aca el codigo que hace esta tarea:

Código:
        private DataTable dttObtieneDatosExcel(string sArchivo, string sHojaTrabajo)
        {
            Excel._Application xlApp;
            Excel._Workbook xlLibro;
            Excel._Worksheet xlHoja;
            Excel.Sheets xlHojas;
            Excel.Range xlRango;
            

            xlApp = new Excel.Application();
            xlLibro = xlApp.Workbooks.Open(sArchivo, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            xlHojas = xlLibro.Sheets;
            xlHoja = (Excel._Worksheet)xlHojas[sHojaTrabajo];
ahora necesito poder seleccionar un rango, pero a priori no se cuales son las dimensiones de ese rango, me explico.

cuando quiero seleccionar un rango, del cual se sus dimensiones en C# hago lo siguiente:

Código:
            xlRango = xlHoja.get_Range("A1","C3");
            xlRango.Font.Bold = true;
el problema que tengo en este momento, es que como no se las dimensiones del rango, tengo que determinarlas automaticamente.

aca la pregunta:
Es posible automatizar este proceso, de la misma forma que lo hace el excel mediante el uso combinado de tecjas Control + Shift + (Flecha de direccion) ??
de manera que al ejecutar dicha instruccion, se cargue en el objeto range las coordenadas de manera automatica.

se me ocurre que de manera mas "manual" podria recorrer celda por celda hasta encontrar "celdas vacias" pero esto no es solucion, porque en caso de existir celdas en blanco entre los datos, no seleccionaria el rango completo :(

busque en las paginas de msdn para ver formas de trabajar con rangos, pero siempre se mencionan los metodos de rangos conocidos

Alguien sabe donde puedo encontrar informacion para trabajar con rangos, o tiene alguna otra solucion.
Saludos Cordiales

PLCH