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
Linux automatizar proceso calc desde script
-
- Mensajes: 21
- Registrado: Jue Sep 03, 2020 11:37 pm
Linux automatizar proceso calc desde script
Ú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
Re: automatizar proceso calc desde script
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:
Y los usarías así:
Te explico, la primera línea
Y lo que hace, es que si existe un archivo con esa ruta, lo va a eliminar.
en la segunda y tercera línea
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
El segundo For
Espero haberlo explicado correctamente.
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
Dim oSSimpleFileAccess, oSTextOutputStream As Object 'Variables para los Servicios requeridos
oSSimpleFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
oSTextOutputStream = CreateUnoService("com.sun.star.io.TextOutputStream")
Código: Seleccionar todo
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()
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")If oSSimpleFileAccess.exists(sRuta) Then oSSimpleFileAccess.kill(sRuta)
Y lo que hace, es que si existe un archivo con esa ruta, lo va a eliminar.
en la segunda y tercera línea
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.oSTextOutputStream.setOutputStream(oSSimpleFileAccess.openFileWrite(sRuta))
oSTextOutputStream.setEncoding("UTF-8")
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
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.For c = LBound(mColumnsAndRows) To UBound(mColumnsAndRows)
mOfRows = mColumnsAndRows(c)
El segundo For
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.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
Espero haberlo explicado correctamente.
LibreOffice 7.2.6.2 | Windows 7 Ultimate
-
- Mensajes: 21
- Registrado: Jue Sep 03, 2020 11:37 pm
Re: automatizar proceso calc desde script
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...
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
Re: Linux automatizar proceso calc desde script
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
https://forum.openoffice.org/en/forum/v ... 45&t=19695
LibreOffice 7.2.6.2 | Windows 7 Ultimate