Página 1 de 1

[Resuelto] macro seleccionar varias hojas e imprimirCALC

Publicado: Jue Jul 30, 2009 5:03 pm
por lobito
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?

Re: macro para seleccionar varias hojas e imprimir en CALC

Publicado: Jue Jul 30, 2009 7:38 pm
por mauricio
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

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

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

Re: macro para seleccionar varias hojas e imprimir en CALC

Publicado: Vie Jul 31, 2009 1:02 am
por lobito
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