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

como seleccionar un rango automaticamente usando interop en c#

Estas en el tema de como seleccionar un rango automaticamente usando interop en c# en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/10/2009, 08:06
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 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
  #2 (permalink)  
Antiguo 06/10/2009, 09:37
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: como seleccionar un rango automaticamente usando interop en c#

:D ya encontre el como .. posteo el como para que le sirva a alguien mas

Para poder determinar la cantidad de columas y filas de una hoja en excel usando interop, se debe usar el metodo UsedRange de la hoja de la siguiente manera.

Código:
            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];

            int  iNumeroFilas = xlHoja.UsedRange.Rows.Count;
            int iNumeroColumnas = xlHoja.UsedRange.Columns.Count;
de esta forma, podemos establecer un rango mas acotado y acelerar las busquedas dentro de la hoja de trabajo

slds PLCH
  #3 (permalink)  
Antiguo 13/07/2012, 16:23
Avatar de JxDarkAngel  
Fecha de Ingreso: septiembre-2009
Mensajes: 82
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: como seleccionar un rango automaticamente usando interop en c#

Pero desafortunadamente no te respeta cuando hay gráficos en un archivo de Excel.

Ejemplo si tienes una tabla y abajo una Gráfica, solo trae el rango que ocupa la Tabla. El espacio que ocupa la gráfica lo ignora
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 00:08.