Linux automatizar proceso calc desde script

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

Linux automatizar proceso calc desde script

Notapor mmittelbach » Mié Sep 22, 2021 10:51 pm

Hola a todos.
He creado un script, mediante el cual puedo bajar una información a un archivo temporal *.tmp que puedo leer con libreoffice calc (mediante aceptar las opciones de importación) y luego de modificarlo (eliminar filas) puedo grabarlo como *.csv y mediante otro script puedo verlo por la terminal. He visto algunas opciones desde la consola, operando el comando "soffice --calc" que incorpore para la descarga del *.tmp, pero no vi opciones que me permitan como por ejemplo obviar tener que darle enter al proceso de importación del documento.
Mi pregunta es si puedo mediante sentencias en el script automatizar el proceso (no tener que dar enter a la opcion de importación, borrar las filas necesarias del archivo tmp y grabarlo como *.csv), de manera tal que el script general baje la información y la procese sin necesidad de que tenga yo que operar de manera manual.
Supongo que debe haber una forma, pero la desconozco.
Les adjunto una imagen a efectos de que vean simplemente las filas que tengo por encima de los datos y debo borrar
Gracias a todos
Adjuntos
masca.png
Última edición por mmittelbach el Sab Sep 25, 2021 1:01 am, editado 1 vez en total
Libre Office 6.0.7.3. en Linux Mint 19.3
mmittelbach
 
Mensajes: 21
Registrado: Jue Sep 03, 2020 11:37 pm

Re: automatizar proceso calc desde script

Notapor Neftali R » Jue Sep 23, 2021 2:58 pm

Sería mejor si subes un par de archivos, un ods con la estructura que siembre consigues y un csv que sería el resultado esperado para el ods original.

Así cono está la información solo te puedo hablar de la forma que yo uso para importar un ods a csv, creo que conseguí la estrategia en el foro en inglés, pero no estoy seguro.

Para importar un ods a un cvs, utilizo 2 servicios principales:

Código: Seleccionar todo   Expandir vistaContraer vista
Dim oSSimpleFileAccess, oSTextOutputStream As Object 'Variables para los Servicios requeridos
oSSimpleFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
oSTextOutputStream = CreateUnoService("com.sun.star.io.TextOutputStream")


Y los usarías así:
Código: Seleccionar todo   Expandir vistaContraer vista
   If oSSimpleFileAccess.exists(sRuta) Then oSSimpleFileAccess.kill(sRuta)
oSTextOutputStream.setOutputStream(oSSimpleFileAccess.openFileWrite(sRuta))
oSTextOutputStream.setEncoding("UTF-8")
   For c = LBound(mColumnsAndRows) To UBound(mColumnsAndRows)
      mOfRows = mColumnsAndRows(c)
            For r = LBound(mOfRows) To UBound(mOfRows)
               If r = UBound(mOfRows) Then
               oSTextOutputStream.writeString(mOfRows(r) & Chr(10))
               Else
               oSTextOutputStream.writeString(mOfRows(r) & Chr(9))
           End If
        Next
     Next
oSTextOutputStream.closeOutput()


Te explico, la primera línea
If oSSimpleFileAccess.exists(sRuta) Then oSSimpleFileAccess.kill(sRuta)

En la variable sRuta está la ruta del archivo en el que quieres guardar el archivo, esa ruta es una ruta URL e incluye el nombre del archivo, ejemplo: sRuta = ConvertToURL("C:\usuario\documents\example.csv")
Y lo que hace, es que si existe un archivo con esa ruta, lo va a eliminar.

en la segunda y tercera línea
oSTextOutputStream.setOutputStream(oSSimpleFileAccess.openFileWrite(sRuta))
oSTextOutputStream.setEncoding("UTF-8")

Lo que hace es crear el archivo, lo "abre", crea un canal para escribir en el archivo y establecer una codificación para los caracteres que se van a escribir en el mismo.

Después los dos For son simplemente para recorrer toda la matriz donde está la información, es una matriz obtenida del método getDataArray, así que es una matriz de matrices.

El primer For
For c = LBound(mColumnsAndRows) To UBound(mColumnsAndRows)
mOfRows = mColumnsAndRows(c)

Tiene un contador que va desde el inicio de la matriz hasta el final, introduciendo a la variable mOfRows una de las sub matrices contenida en la variable mColumnsAndRows con cada repetición.

El segundo For
For r = LBound(mOfRows) To UBound(mOfRows)
If r = UBound(mOfRows) Then
oSTextOutputStream.writeString(mOfRows(r) & Chr(10))
Else
oSTextOutputStream.writeString(mOfRows(r) & Chr(9))
End If

Va desde el inicio de la sub matriz hasta el final de la misma, escribiendo como un string la información contenida en la matriz y uniendola con un Chr(9) que sería un tab en caso de no ser el último valor de la matriz, y si es el último valor del a matriz, lo concatena con un Chr(10) que sería un salto de línea.

Espero haberlo explicado correctamente.
LibreOffice 6.3.2.2. | Windows 7 Ultimate
Neftali R
 
Mensajes: 81
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: automatizar proceso calc desde script

Notapor mmittelbach » Vie Sep 24, 2021 1:12 am

Ah!, eso es para so windows por lo que veo?
Desde ya muchas gracias por haberme contestado.
Desgraciadamente no utilizo windows, tendría que analizar y ver si puedo utilizar esta estructura (adaptada) en linux.
De todas formas no creo que sea tan difícil obtener desde la linea de comandos (no GUI) las transformación de ods a csv.
Me resisto a creer que es tan complicado.
Voy a ver si puedo utilizar esta solucion y te cuento como me ha ido...
Libre Office 6.0.7.3. en Linux Mint 19.3
mmittelbach
 
Mensajes: 21
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Linux automatizar proceso calc desde script

Notapor Neftali R » Mar Sep 28, 2021 3:50 pm

Hey, acabo de leer algo en el foro en inglés que probablemente te sea útil.

https://forum.openoffice.org/en/forum/v ... 45&t=19695
LibreOffice 6.3.2.2. | Windows 7 Ultimate
Neftali R
 
Mensajes: 81
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado