Guardar como asignando nombre

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

Guardar como asignando nombre

Mensaje por Preguntar-Responder »

Buenas a todos.
Tengo una macro hecha con la grabadora para capturar datos manualmente desde un documento. La macro abre el documento y la la ventana que me muestra una Table de una Base de Datos. Hasta ahí llega la macro. A continuación yo manualmente capturo los datos de la tabla para que me aparezcan en los campos del documento que tiene los campos correspondientes a la Tabla.

Es decir, la macro me abre el documento y la ventana para capturar los datos de la Tabla. Luego la captura la hago yo manualmente seleccionando los registros que me interesan de la Tabla abierta, y finalmente aparecen los datos capturados en el documento.

Con el documento conteniendo ya la captura de datos, quisiera si es posible que alguien me eche una mano, para hacer una macro (que creo que debe ser sencilla pero yo no soy capaz de hacerla, ya que la grabadora no permite grabar acciones de abrir documentos , guardarlos y cerrarlos, o “guardarlos como”) que me guardara una versión del documento que contiene los datos capturados y que me guardara sin grabar los cambios el documento que primeramente abrí con la macro anterior.

Es decir, la nueva macro tendría que hacer simplemente un “guardar como” del documento que aparece con los datos capturados, pero esa macro para “guardar como” debería permitirme que dentro de su código se asignara el nombre al nuevo documento. Este nombre no lo introduciría yo por teclado sino que ya debería ir en el código. Hasta ahí llegaría la macro.

La idea es que cuando termine de ejecutarse la macro para “guardar como” , yo iría a carpeta donde se haya guardado, busque la versión del documento y compruebe que los datos están capturados.

Adjunto el código de la grabadora que me cierra un documento abierto pudiendo salvar los cambios, no salvarlos, guardar como – pero en ese caso me aparece la ventana en pantalla para dar el nombre al documento-, y cerrarlo. ( para usar una de estas opciones simplemente anulo las líneas que no me interesan).

EN RESUMEN: Macro para “guardar como” el documento activo y que asigne el nombre de la nueva versión del documento por código.

Saludos, y perdón por la extensión.
Adjuntos
Macro GUARDAR COMO.odt
(12.42 KiB) Descargado 267 veces
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Guardar como asignando nombre

Mensaje por Longi »

Buenas!
Casi todo es posible, pero.....
propongo otra vía:
El origen de los datos es una base de datos, por lo que podemos lanzar una macro desde un botón en la base que abra una plantilla de Writer en la que incrusta una tabla con los campos necesarios y las filas correspondientes que serán rellenada automáticamente.
Por último guardaríamos el documento en la carpeta que desees, mientras que la plantilla queda intacta.
Ya contarás!

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

Re: Guardar como asignando nombre

Mensaje por Preguntar-Responder »

Buenas tardes, y gracias por la respuesta, pero de esa forma no puedo seleccionar los registros que quiero utilizar de la Tabla, además necesito hacer un "guardar como" por código, cuyo código lleve el nombre de la nueva versión del archivo.
Saludo.
Libre Office 4.4.5.3. Sistema Operativo Windows 8 Pro
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Guardar como asignando nombre

Mensaje por Longi »

Eso mismo es lo que te estaba ofreciendo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

Re: Guardar como asignando nombre

Mensaje por Preguntar-Responder »

Es verdad, no había leído bien la parte de :"con los campos necesarios ", pero lo que pasa es que yo esto lo tengo que hacer con la grabadora porque no manejo el código (no soy capaz) de desenmarañar la API para ver que objetos, y métodos y propiedades utilizar, por eso aunque la idea general que me das es buena en el sentido que hace lo que pido en buena medida, sin embargo para mi se me hace muy complicada, por eso es mas accesible para mi algo sencillo como "guardar como" sin muchas complicaciones. De todos modos se agradece la idea.
Saludos.
Libre Office 4.4.5.3. Sistema Operativo Windows 8 Pro
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Guardar como asignando nombre

Mensaje por Longi »

buenas!
Con la grabadora hice la siguiente macro:

Código: Seleccionar todo

sub Main
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(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Users/pablo/Desktop/Sugalfa.odt"
args1(1).Name = "FilterName"
args1(1).Value = "writer8"

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


end sub
Tendrías que cambiar la ruta "file:///C:/Users/pablo/Desktop/Sugalfa.odt" por la que a tí te venga bien (Sulfaga es el nombre del documento y lo anterior es la ruta de guardado)
De todos modos me parece poco operativo.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

Re: Guardar como asignando nombre

Mensaje por Preguntar-Responder »

Bueno la verdad es que me ha sido muy útil. He probado y funciona, pero no todo va a ser siempre bueno, en el sentido de que esta solución para guardar el documento ha sido eficaz y de hecho es que la estoy utilizando, sin embargo ahora me ha surgido otro inconveniente. ( y es el último).
Es el siguiente: dentro de un documento tengo un sobre (que no es más que un Marco del tamaño que me interesa en el cual tengo colocados los campos cuyos datos capturo de la Tabla de la Base de Datos, esta captura la hago manualmente no por código); bien pues una vez que tengo capturados los datos en el sobre lo quiero copiar al portapapeles, y esta tarea la quiero hacer con una macro. Para grabar esta macro uso la grabadora y lo hago Seleccionando todo el documento. Con esta acción se genera el correspondiente código. ¿Cuál es el problema?. Pues que en la versión 7.1.0.3 de Libre Office funciona, pero en la versión 4.0. y algo.. no funciona, es decir no copia nada al portapapeles. Entonces quiero que el foco -el cursor- pase dentro del sobre, o sea dentro del marco, y si el cursor está dentro del marco, o sea dentro del sobre, si funciona.
Para RESUMIR no soy capaz (por código se entiende) de pasar el foco del documento (donde tengo insertado el Marco -el sobre-) al interior del Marco. Uso el método SetFocus, pero hace hace nada.
También he estado mirando el servicio Frame, y no he sacado nada en claro.
Bueno si puedes echar una mano me vendría genial.
Saludos.
Libre Office 4.4.5.3. Sistema Operativo Windows 8 Pro
Responder