XLRG   30-06-2025, 19:56
#1
Buenas tardes:
Cómo puedo leer/escribir datos en un archivo Calc de LibreOffice, recorriendo las celdas según su posición (columna/fila?????
vuott   30-06-2025, 20:29
#2
En mi opinión, necesitas conocer el protocolo de construcción del archivo ods.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shordi   Ayer, 08:27
#3
Un archivo .ods (igual que un archivo docx o odt) es un archivo comprimido. Si abres un archivo .ods con el Gestor de Archivadores, es decir, el manejador de archivos comprimidos, verás la estructura interna del mismo. Si entonces te atreves, una vez entiendas la estructura (básicamente un .xml) podrás manipularlo.
Sin embargo eso es muy complejo. Te aconsejo una cosa: El paquete LibreOffice tiene un una utilidad llamada Convert, con ella puedes convertir cualquier formato de los que libreOffice entiende en cualquier otro. Utilízala para convertir el .ods en un, por ejemplo, .csv y después de modificar lo que necesites, vuelve a convertirlo en .ods. Las limitaciones que esto tiene son evidentes (si tienes funciones agregadas o fórmulas o macros o lo que sea, a parte de los datos, no funcionará), pero para cosas sencillas vale. En algún lugar tengo hechas esas funciones de conversión... pero sin saber qué quieres y para qué, me da pereza ponerme a buscarlas.

Saludos.

No podemos regresar
cogier   Ayer, 12:00
#4
sto puede hacerse así: -

1/. Abra el archivo .ods y elimine todas las comas o cámbielas por punto y coma.
2/. Guarde el archivo como archivo .csv
3/ Cargue el archivo .csv en Gambas con

Código:
Dim sData As String[]
sData = Split(File.Load("myCSV.csv"), gb.NewLine, "", True)


4/. Ahora puede dividir cada línea de la matriz por una coma

Cada línea del array es una Fila y puedes Dividir cada Fila como Columnas
vuott   Ayer, 15:24
#5
(Ayer, 12:00)cogier escribió: sto puede hacerse así: -
1) Abrir el archivo .ods con que programa ?
2) En fin como guardar el archivo en .ods ? Es necesario restablecer las comas ?

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
XLRG   Ayer, 18:13
#6
(Ayer, 08:27)Shordi escribió: Un archivo .ods (igual que un archivo docx o odt) es un archivo comprimido. Si abres un archivo .ods con el Gestor de Archivadores, es decir, el manejador de archivos comprimidos, verás la estructura interna del mismo. Si entonces te atreves, una vez entiendas la estructura (básicamente un .xml) podrás manipularlo.
Sin embargo eso es muy complejo. Te aconsejo una cosa: El paquete LibreOffice tiene un una utilidad llamada Convert, con ella puedes convertir cualquier formato de los que libreOffice entiende en cualquier otro. Utilízala para convertir el .ods en un, por ejemplo, .csv y después de modificar lo que necesites, vuelve a convertirlo en .ods. Las limitaciones que esto tiene son evidentes (si tienes funciones agregadas o fórmulas o macros o lo que sea, a parte de los datos, no funcionará), pero para cosas sencillas vale. En algún lugar tengo hechas esas funciones de conversión... pero sin saber qué quieres y para qué, me da pereza ponerme a buscarlas.

Saludos.

Muchas gracias por la respuesta, realmente creo que no me da resultado, porque necesito llenar datos en hojas que ya tienen un formato determinado y fórmulas. Finalmente creo que lo haré web

(Ayer, 12:00)cogier escribió: sto puede hacerse así: -

1/. Abra el archivo .ods y elimine todas las comas o cámbielas por punto y coma.
2/. Guarde el archivo como archivo .csv
3/ Cargue el archivo .csv en Gambas con

Código:
Dim sData As String[]
sData = Split(File.Load("myCSV.csv"), gb.NewLine, "", True)


4/. Ahora puede dividir cada línea de la matriz por una coma

Cada línea del array es una Fila y puedes Dividir cada Fila como Columnas

Muchas gracias por la respuesta, realmente creo que no me da resultado, porque necesito llenar datos en hojas que ya tienen un formato determinado y fórmulas. Finalmente creo que lo haré web

(30-06-2025, 20:29)vuott escribió: En mi opinión, necesitas conocer el protocolo de construcción del archivo ods.

Muchas gracias por la respuesta, ya vi que es bastante complejo, intentaré otras opciones
Última modificación: Ayer, 18:15 por XLRG.
tincho   Ayer, 18:28
#7
El archivo .ods es un archivo .zip en realidad, dentro tiene unas carpetas y unos archivos, por ejemplo:

Código:
drwxrwxr-x 11 user group  4096 Jul  1 17:56 Configurations2
-rw-rw-r--  1 user group  5553 Jul  1 15:50 content.xml
-rw-rw-r--  1 user group  899 Jul  1 15:50 manifest.rdf
drwxrwxr-x  2 user group  4096 Jul  1 17:56 META-INF
-rw-rw-r--  1 user group  840 Jul  1 15:50 meta.xml
-rw-rw-r--  1 user group    46 Jul  1 15:50 mimetype
-rw-rw-r--  1 user group  9370 Jul  1 15:50 settings.xml
-rw-rw-r--  1 user group 15352 Jul  1 15:50 styles.xml
drwxrwxr-x  2 user group  4096 Jul  1 17:56 Thumbnails
Luego los datos estan en un archivo XML llamado content.xml ese es el archivo a cargar y recorrer, y tiene la siguiente estructura:

Código:
  <table:table table:name="Sheet1" table:style-name="ta1">
    <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
    <table:table-column table:style-name="co2" table:number-columns-repeated="5" table:default-cell-style-name="Default"/>
    <table:table-row table:style-name="ro1" table:number-rows-repeated="4">
    <table:table-cell table:number-columns-repeated="6"/>
    </table:table-row>
    <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>x</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>Gambas</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>Python</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>C++</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="2"/>
    </table:table-row>
    <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>z</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="1" calcext:value-type="float">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="2" calcext:value-type="float">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="3" calcext:value-type="float">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="2"/>
    </table:table-row>
    <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>w</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>a</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>b</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string">
      <text:p>c</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="2"/>
    </table:table-row>
    <table:table-row table:style-name="ro1">
    <table:table-cell table:number-columns-repeated="6"/>
    </table:table-row>
    <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string" calcext:value-type="string">
      <text:p>s</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" calcext:value-type="string">
      <text:p>t</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" calcext:value-type="string">
      <text:p>u</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" calcext:value-type="string">
      <text:p>v</text:p>
    </table:table-cell>
    <table:table-cell/>
    <table:table-cell office:value-type="string" calcext:value-type="string">
      <text:p>r</text:p>
    </table:table-cell>
    </table:table-row>
  </table:table>


[Imagen: aYXnYLHl.png]

Asi que finalmente puedes leer y escribir datos con el componente gb.xml, este componente tiene herramientas para gestionar los nodos XML y el texto es una propiedad del nodo. no tengo a mano un codigo que haga esa parte pero puedo buscarlo.

1 Saludo.
cogier   Ayer, 18:44
#8
No es complejo. ¿Puede enviar un archivo .ods de ejemplo y le mostraré cómo hacerlo?

Para responder vuott: - Libreoffice Calc abrirá archivos .ODS y los guardará como archivos .CSV al igual que los siguientes programas.
Microsoft Excel
Google Sheets
Calligra Sheets
Gnumeric
Collabora Office Calc
FileApp
IBM Lotus Symphony Spreadsheets

No es necesario cambiar todas las comas, pero para un primer programa esto será lo más sencillo.
Última modificación: Ayer, 18:45 por cogier.
tincho   Ayer, 18:54
#9
Un archivo .CSV no es un .ODS Smile

1 Saludo.
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.