Estructura final, con métodos y propiedades
Conectores
Las estructuras deben tener una propiedad para apuntar a cada nivel según su jerarquía en el árbol del objeto por cada nivel se agrega un grandparent (abuelo) mas.
Una vez teniendo la estructura correctamente se crean los métodos para la obtención del objeto "Interior". Estos dos métodos son: GETINTERIOR y GETINTERIORINT
GETINTERIOR es un metodo del tipo LN4, que crea un nuevo registro y luego llama al método GETINTERIORINT que es el que realmente hace el llamado al objeto de Excel. A continuación se ilustra como es este método:
Método GETINTERIOR
GETINTERIORINT es el wrapper (envolvente) del método de la dll que hace el verdadero llamado a Excel para obtener el objeto Interior. Este método hace el llamado a la función GetObjectFromProperty. Esta función obtiene el objeto Interior de la propiedad Interior (Llevan el mismo nombre) del objeto Range, el cual es el tipo de objeto que se obtiene desde PeopleNet al llamar el metodo EXCEL_CELLS.GetCell(x,y) del objeto Excel. Según esto, primero se debe llamar obtener la celda (Objeto Range en Excel) y luego obtener el interior de la celda (Objeto Interior en Excel).
Por último el método COLORINDEX, este método es el wrapper del método de la dll que cambia la propiedad ColorIndex del objeto Inerior. Este método en la dll se llama OLE_Property, este hace el llamado a la propiedad según el nombre del método, por eso el método debe llamarse igual que la propiedad que se desea modificar (No es case sensitive). Si se deseara modificar otra propiedad de este objeto simplemente se crea el método con el nombre de la propiedad que se desea modificar. Se debe tener en cuenta que si esta propiedad es un objeto, debe obtenerse el objeto de la misma manera que se obtiene el objeto Interior, y no puede asignarse directamente.
Espero que les sea útil."
15 comentarios:
Gracias por los ocmentarios y por el post.
En mi caso realice toda la estructura y tengo luego algo como esto:
RARAM1 = "NOMBRES"
EXCEL!EXCEL_CELLS.GetCell(fila,12)
EXCEL!EXCEL_CELLS.Value(RARAM1)
A que sentencia se debe hacer referencia y que valor se coloca para por ejemplo colocar esta celda de color amarillo.
Mil Gracias.
Despues de obtener la celda con GetCell(x,y), se debe obtener el "INTERIOR" de la celda:
EXCEL!CB_EXCEL_INTERIOR.GETINTERIOR()
Y por último asignar el valor al "COLORINDEX" del "INTERIOR":
EXCEL!CCB_EXCEL_INTERIOR.COLORINDEX(3)
En este caso el 3, es para el color Rojo, no conozco bien la totalidad de indices de colores que maneja, puedes probar con otros numeros hasta que encuentres el amarillo :P
Espero te sirve.
Ya realice todo este procedimiento.
pero al final cuando agrego en mi regla:
EXCEL!EXCEL_Cells.GetCell(Y,X+3)
EXCEL!EPR_EXCEL_INTERIOR.GETINTERIOR()
EXCEL!EPR_EXCEL_INTERIOR.COLORINDEX(3)
EXCEL!EXCEL_Cells.Value("TOTAL DEL CONCEPTO DE NETOS: ")
EXCEL!EXCEL_Cells.GetCell(Y,X+5)
EXCEL!EXCEL_Cells.Value(TOSTRING(vIMPORTE,2))
al compilar la regla me dice que el metodo colorindex no necesita argumento! que argumentos le tendria que agregar para que me funcione?
Alguien me puede ayudar
Gracias
Excelente!
nelrogel, agregale un arg tipo numerico al colorindex y asegurate que los métodos y propiedades esten de acuerdo a lo que dice el post y te funcionará.
Saludos y Gracias,
Muchas gracias!
Tengo otra duda.
Si quisiera modificar la fuente a Negritas así como el tamaño y el estilo de fuente que función ocuparía o como le podría hacer para resolver esto ya que en algunos Reportes en Excel que estoy haciendo me piden que ingrese Totales con Negritas.
Muchisimas Gracias por su ayuda.
Saludos
Deberias crear una estructura entera que te maneje el objeto fuente (Font), y a este exponerle propiedades de negrita(Bold), indice de color(ColorIndex), etc.
Basicamente es hacer lo mismo que con el objeto interior pero obteniendo la fuente, todo como un hijo de la estructura cells.
Esto requerirá de un poco de investigación y pruebas, de todas formas, si alguien tiene la respuesta postearla. Gracias.
ya está funcionando!! son 56 colores los que maneja
1 negro
2 blanco
3 rojo
4 verde
5 azul
6 amarillo
7 rosa
etc etc...
Nadamas como truco para las personas que estan teniendo problemas con los argumentos, reinicien peoplenet!! si te dice que el metodo no requiere argumentos, borra caches y reinicia. Una vez reiniciado te permitirá!!
No es necesario que crees un M4O y lo heredes...utiliza el mismo ojecto ( EXCEL )...con las siguientes lineas le das color a la celda
EXCEL!EXCEL_CELLS.GetCell(1,1)
EXCEL!EXCEL_CELLS.Value("Sobrecupo por CAPACITACION")
EXCEL!EXCEL_CELLS_BORDERS.GetBorder()
EXCEL!EXCEL_CELLS_BORDERS.GetBorderInt("Interior")
EXCEL!EXCEL_CELLS_BORDERS.ColorIndex(35)...
Saludos.
Jose Luis Nuñez
Guadalajara, Jalisco, Mexico
Gente, buenas tardes, quizas alguien me pueder echar una mano.
Cuando quiero sacar un reporte de varias empresas, me aparece el siguiente error:
Error (0-27-5) Error en ejecución.
El método externo "OLE_Property" de la biblioteca "oleexec" se ejecutó con errores.
Debe consultar el resto de mensajes.
Error (0-36-11)
El puntero OLE ha dejado de ser válido
Error (0-36-9) Invocación de método/propiedad ha fallado.
El método OLE "Cells" no ha podido ser ejecutado. Error de sistema "-2147024882": "".
Debe revisar la la existencia del método.
Desde ya, muy agradecido.
Hola, buenos días.
Con respecto al último comentario...¿encontraste la solución?
Si es así, por favor dime cómo lo resolviste, ya que a mí se me esta presentando un error muy similar y no sé cómo resolverlo:
Error (0-27-5) Error en ejecución.
El método externo "OLE_Execute" de la biblioteca "oleexec" se ejecutó con errores.
Debe consultar el resto de mensajes.
Error (0-36-11)
El puntero OLE ha dejado de ser válido
Por favor, si alguno de los comentarista conoce la solución, le agradecería que me aportara su ayuda.
Muchas gracias.
Hola, buenos días.
Con respecto al último comentario...¿encontraste la solución?
Si es así, por favor dime cómo lo resolviste, ya que a mí se me esta presentando un error muy similar y no sé cómo resolverlo:
Error (0-27-5) Error en ejecución.
El método externo "OLE_Execute" de la biblioteca "oleexec" se ejecutó con errores.
Debe consultar el resto de mensajes.
Error (0-36-11)
El puntero OLE ha dejado de ser válido
Por favor, si alguno de los comentarista conoce la solución, le agradecería que me aportara su ayuda.
Muchas gracias.
Hola, buenas tardes.
Les hago una consulta. Tengo el siguiente problema: cuando utilizo el m4o EXCEL, me genera un proceso de ejecución EXCEL.EXE. Este sigue activo en la cola de procesos del sistema operativo, aún luego de haber terminado con la "tarea".
Existe alguna manera de "matar" el proceso luego de terminar de utilizar el M4O EXCEL?
Si ejecuto n veces el proceso que utiliza el m40 excel me crea N procesos de ejecución en windows...
Les ha sucedido esto? podrán aydarme?
muchas gracias
Hola, buenas tardes.
Les hago una consulta. Tengo el siguiente problema: cuando utilizo el m4o EXCEL, me genera un proceso de ejecución EXCEL.EXE. Este sigue activo en la cola de procesos del sistema operativo, aún luego de haber terminado con la "tarea".
Existe alguna manera de "matar" el proceso luego de terminar de utilizar el M4O EXCEL?
Si ejecuto n veces el proceso que utiliza el m40 excel me crea N procesos de ejecución en windows...
Les ha sucedido esto? podrán aydarme?
muchas gracias
Buenas tardes,
Excelente BLOG, excelente post, y mis felicitaciones a todos,
Alguien sabe si desde aquí (o desde la nueva API de Excel C++ desde la versión 8) se puede centrar el contenido de una celda?
Muchisimas gracias!
Siempre atento al blog y muy agradecido
Publicar un comentario