[Resuelto] macro seleccionar varias hojas e imprimirCALC

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[Resuelto] macro seleccionar varias hojas e imprimirCALC

Notapor lobito » Jue Jul 30, 2009 5:03 pm

Hola, es mi primer mensaje y me he decidido a realizarlo porque no he logrado solucionar un problema (llevo más de una semana con esto) que talvez sea algo simple, pero no encuentro como realizarlo. El problema es el siguiente:

Necesito realizar una macro en CALC, que mande a imprimir 3 hojas especifícas de un libro que contiene 4. He revisado el foro y bastante documentación de OO pero no logro hacer que funcione. Si uso la opción "Grabar Macro" obtengo el siguiente código:


*******************************************************************************************************
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Nr"
args2(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Copies"
args3(0).Value = 1
args3(1).Name = "Collate"
args3(1).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args3())

*******************************************************************************************************


El cual funciona correctamente cuando estoy grabando la macro, pero al volver a ejecutarlo únicamente imprime la primer hoja. No entiendo porque sucede esto. No he encontrado como modificarlo, tampoco ejemplos que me ayuden a solucionarlo .

¿Alguien tiene alguna idea de como solucionar esto?
Última edición por lobito el Vie Jul 31, 2009 1:07 am, editado 1 vez en total
lobito
 
Mensajes: 2
Registrado: Jue Jul 30, 2009 4:41 pm

Re: macro para seleccionar varias hojas e imprimir en CALC

Notapor mauricio » Jue Jul 30, 2009 7:38 pm

Hola...

Que bueno que hayas tratado de resolverlo por ti mismo, te felicito. A la grabadora de macros le hace falta madurar mucho más, por ahora, mi recomendación sigue siendo aprender OOo Basic, claro, no todos tienen la necesidad, ni tendrían por que tener el interes, pero es muy divertido...

Para hacer lo que quieres, tienes que considerar (te copio el apunte especifico de mi libro):

En versiones anteriores de OOo, cuando enviabas a imprimir, de forma predeterminada, se enviaba todas las hojas del documento, ahora, como creo, debe ser, solo se envían las hojas seleccionadas, claro, esto siempre lo puedes cambiar desde el cuadro de dialogo imprimir en el menú Archivo | Imprimir..., Para seleccionar varias hojas a imprimir, solo tienes que seleccionar un rango de cada una de ellas, puede ser solo una celda, y agregarlos a un contenedor de rangos que ya aprendimos a usar, y seleccionarlos, al seleccionar rangos de diferentes hojas, como consecuencia, se seleccionaran las hojas que los contienen, después, podemos enviar a imprimir como en el siguiente ejemplo:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Imprimiendo20()
Dim oDoc As Object
Dim oHojas As Object
Dim mOpc()
Dim oRangos As Object
   
   oDoc = ThisComponent
   oHojas = oDoc.getSheets()
   'Creamos el contender para los rangos
   oRangos = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")

   'Agregamos la primer celda de cada hoja, puede ser cualquier celda
   oRangos.addRangeAddress( oHojas.getByIndex(6).getCellRangeByName("A1").getRangeAddress() ,False )
   oRangos.addRangeAddress( oHojas.getByIndex(7).getCellRangeByName("A1").getRangeAddress() ,False )
   oRangos.addRangeAddress( oHojas.getByIndex(8).getCellRangeByName("A1").getRangeAddress() ,False )

   'Al seleccionar las celdas de diferentes hojas, estamos seleccionando dichas hojas
   oDoc.getCurrentController.select( oRangos )   

   'Enviamos a imprimir
   oDoc.print( mOpc() )

End Sub


Las hojas de tu archivo de Calc, están numeradas de izquierda a derecha y empieza en 0, por lo que: getByIndex(6), accede a la hoja siete en la interfaz del usuario, si quieres usar el nombre de la hoja, puedes cambiar getByIndex, por getByName de la siguiente manera
Código: Seleccionar todo   Expandir vistaContraer vista
oHojas.getByName("datos").getCellRangeByName("A1").getRangeAddress()

en donde hacemos referencia a la celda A1 de la hoja llamada "datos"

La recomendación general, es que siempre establezcas tus áreas de impresión correctamente, así como el estilo de página con la configuración deseada, con lo cual, la impresión se facilitará enormemente.

Te invito a estudiar OOo Basic, el capitulo de impresión, son siete páginas de información y ejemplos que te pueden servir. Para descargar la ultima versión de los apuntes:

http://www.universolibre.org/archivos/A ... oBasic.odt

Saludos

Mauricio
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.0 | LibO 4.0 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 3418
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: macro para seleccionar varias hojas e imprimir en CALC

Notapor lobito » Vie Jul 31, 2009 1:02 am

Hola, gracias por la respuesta, una excelente explicación y el ejemplo funciona de maravilla, con esto he logrado solucionar el problema.

Tomaré en cuenta tus recomendaciones y trataré de aprender OOo Basic, ya descargué tu libro y me parece una guía estupenda.

Saludos
lobito
 
Mensajes: 2
Registrado: Jue Jul 30, 2009 4:41 pm


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados