[RESUELTO]Ejecutar macro dentro de un archivo desde terminal

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Christopherccg
Mensajes: 3
Registrado: Mar Jun 10, 2014 8:36 pm

[RESUELTO]Ejecutar macro dentro de un archivo desde terminal

Mensaje por Christopherccg »

Quisiera saber si es posible ejecutar la macro dentro de un archivo o ejecutar una macro para varios archivos desde la terminal de linux sin tener que abrir el documento y ejecutar la macro.
Última edición por mauricio el Mié Jun 11, 2014 3:55 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
OpenOffice / Ubuntu 14.01
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ejecutar macro dentro de un archivo desde terminal

Mensaje por FJCC-ES »

No es posible ejecutar una macro dentro de un archivo desde la terminal, pero sí se puede ejecutar una macro guardada en MisMacros. Uso Windows y ejecuto la macro Main guardada en la biblioteca Standard en el modulo Module1 con

Código: Seleccionar todo

soffice “macro:///Standard.Module1.Main()”
Si la macro abre un archivo con el código

Código: Seleccionar todo

Sub Main(Nombre as String)
NombreURL = convertToURL(Nombre)
oDoc = StarDesktop.loadComponentFromURL(NombreURL, "_blank", 0, Array())
End Sub
puedo abrir el archivo MiArchivo.odt con

Código: Seleccionar todo

soffice “macro:///Standard.Module1.Main(c:\Users\fjcc\Desktop\MiArchivo.odt)”
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Ejecutar macro dentro de un archivo desde terminal

Mensaje por mauricio »

Si uas Linux, aprovecha su versatilidad, puedes llamar a OPenOffice como servicio y ejecutar lo que quieras... mira este ejemplo: https://forum.openoffice.org/es/forum/v ... =31&t=8872

Si nos cuentas que es lo que pretendes en la macro, y no es muy complejo, hacemos el ejemplo...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Christopherccg
Mensajes: 3
Registrado: Mar Jun 10, 2014 8:36 pm

Re: Ejecutar macro dentro de un archivo desde terminal

Mensaje por Christopherccg »

Muchas gracias.

Lo que pretendo hacer es sacar datos de varios archivos de varias hojas y la salida a csv, ese código ya lo tengo hecho si meto la macro en un archivo y lo ejecuto. La idea es meter muchos archivos en una carpeta y desde terminal hacer que la macro se ejecute en todos los archivos, lo bueno de esto es que todos los archivos tienen la misma estructura por lo cual me sirve la sugerencia de FJCC-ES con la macro de libreoffice.

Ahora usaré su idea y cambiaré las referencias de thisComponent a oDoc.

Código: Seleccionar todo

    Sub Main(Nombre as String)
    NombreURL = convertToURL(Nombre)
    oDoc = StarDesktop.loadComponentFromURL(NombreURL, "_blank", 0, Array())
    End Sub
El código completo se los pongo mañana y les cuento como me fue.

Muchas gracias.
OpenOffice / Ubuntu 14.01
Christopherccg
Mensajes: 3
Registrado: Mar Jun 10, 2014 8:36 pm

Re: [RESUELTO]Ejecutar macro dentro de un archivo desde term

Mensaje por Christopherccg »

El código sería el siguiente

Código: Seleccionar todo

REM  *****  BASIC  *****

Sub Main(Nombre as String)
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )

NombreURL = convertToURL(Nombre)
oDoc = StarDesktop.loadComponentFromURL(NombreURL, "_blank", 0, Array())

Dim sRuta As String
Dim mArg()
Dim oNuevoDocumento As Object
RutaTemplate = "private:factory/scalc"
Dim sRutaURL As String
Dim mOpciones(0) As New "com.sun.star.beans.PropertyValue"
Dim RutaOriginal As String
Dim RutaGuardado As String
Dim CarpetaGuardado As String

Dim RFC As String
Dim Nombre As String

mOpciones(0).Name  = "FilterName"
mOpciones(0).Value = "Text - txt - csv (StarCalc)"
sRutaURL = oDoc.getURL()
RutaOriginal = ConvertFromUrl( sRutaURL )
CarpetaGuardado = DirectoryNameoutofPath(RutaOriginal, GetPathSeparator())

RFC = oDoc.getSheets.getByName("Hoja1").getCellRangeByName("A3").String
Nombre = oDoc.getSheets.getByName("Hoja1").getCellRangeByName("H3").String

RutaGuardado = ConvertToUrl ( CarpetaGuardado+"/"+RFC+".csv" )

oNuevoDocumento = StarDesktop.loadComponentFromURL( RutaTemplate, "_default", 0, mArg() )

oNuevoDocumento.Sheets.getByIndex(0).getCellRangeByName("A1").String = "RFC"
oNuevoDocumento.Sheets.getByIndex(0).getCellRangeByName("B1").String = "Nombre"

oNuevoDocumento.Sheets.getByIndex(0).getCellRangeByName("A2").String = RFC
oNuevoDocumento.Sheets.getByIndex(0).getCellRangeByName("B2").String = Nombre

oNuevoDocumento.storeAsURL( RutaGuardado , mOpciones() )
oNuevoDocumento.dispose
oDoc.dispose

End Sub
Abre el archivo, saca los datos los pasa a otra hoja de calculo que guarda como csv y ya. Es lo que necesitaba, ahora solo falta hacer el script en bash para que tome todos los de una carpeta y procesarlos. Disculpen si repito algunas variables, lo hice en partes.
OpenOffice / Ubuntu 14.01
Responder