[RESUELTO] MACROS EN CALC

Discute sobre la aplicación de hojas de cálculo

[RESUELTO] MACROS EN CALC

Notapor cpnquinteros » Mié Nov 11, 2009 7:52 pm

Hace muy poco que uso OpenOffice.

He desarrollado una macro que pretende funcionar de esta manera:

Hay una base de datos con registros numeros. Se ingresa el nro de registro en una celda, se recuperan los datos (con BUSCARV) y se exporta en formato PDF una serie de formularios; el nombre de cada archivo se toma del contenido de una de las celdas.

Al pretender que este trabajo se haga automáticamente con For .. to .. Next, la macro se bloquea porque aparece este mensaje
(aparece al querer exportar el SEGUNDO registro, el primero se exporta OK)

Runtime error!
Program: ..le\OpenOfficePortable\App\openoffice\program\soffice.bin
This application has requested de Runtime to terminate it in an unusual way.

El texto de la macro es el siguiente:

sub IMPRIMIR_FINAL
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim nombre as string
dim valor as long
dim cuit as long
dim cantidad as long
dim i as long
cantidad = inputbox("Cantidad de PDF a generar (ver configuración)")
i = 1

FOR i = 1 to 2 step 1
nombre = thiscomponent.sheets(0).getcellbyposition(0,2).getvalue()
cuit = thiscomponent.sheets(0).getcellbyposition(0,1).getvalue() + 100000000
valor = thiscomponent.sheets(0).getcellbyposition(0,3).getvalue()
thiscomponent.sheets(0).getcellbyposition(0,0).setformula(cuit)
nombrearchivo = thiscomponent.sheets(0).getcellbyposition(0,0).getvalue()

rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///F:/" & nombrearchivo & ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())

valor = valor + 1
thiscomponent.sheets(0).getcellbyposition(0,3).setvalue(valor)
wait 5000
next i

end sub






¿Qué puede estar pasando?

Gracias
Última edición por SLV-es el Lun Oct 15, 2012 11:00 am, editado 2 veces en total
Razón: Marcar como resuelto
OpenOffice 3.1 en Windows Vista
cpnquinteros
 
Mensajes: 3
Registrado: Mié Nov 11, 2009 7:33 pm

Re: MACROS EN CALC

Notapor FJCC-ES » Jue Nov 12, 2009 2:58 pm

1.El método uno:ExportDirectToPDF no necesita el PropertyValue FilterName
2.Sería mejor definir “document” y “dispatcher” fuera del bucle For...Next
3.En su código el valor de nombrearchivo nunca cambia. Adjunte el número i a nombrearchivo para crear un nombre único por cada archivo.

Código: Seleccionar todo   Expandir vistaContraer vista
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim nombre as string
dim valor as long
dim cuit as long
dim cantidad as long
dim i as long
cantidad = inputbox("Cantidad de PDF a generar (ver configuración)")
i = 1
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

FOR i = 1 to 2 step 1
nombre = thiscomponent.sheets(0).getcellbyposition(0,2).getvalue()
cuit = thiscomponent.sheets(0).getcellbyposition(0,1).getvalue() + 100000000
valor = thiscomponent.sheets(0).getcellbyposition(0,3).getvalue()
thiscomponent.sheets(0).getcellbyposition(0,0).setformula(cuit) 'Cuit es un número- setValue sería preferible
nombrearchivo = thiscomponent.sheets(0).getcellbyposition(0,0).getvalue() 'Nombrearchivo es un texto- getString sería preferible

args1(0).Name = "URL"
args1(0).Value = "file:///C:/" & nombrearchivo & CStr(i) & ".pdf"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
valor = valor + 1
thiscomponent.sheets(0).getcellbyposition(0,3).setvalue(valor)
wait 5000
next i
FJCC-ES
 
Mensajes: 714
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: MACROS EN CALC

Notapor cpnquinteros » Vie Nov 13, 2009 4:26 pm

Muchas gracias al experto anónimo.
Esto me será de gran ayuda en mi trabajo.
OpenOffice 3.1 en Windows Vista
cpnquinteros
 
Mensajes: 3
Registrado: Mié Nov 11, 2009 7:33 pm


Volver a Calc

¿Quién está conectado?

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