python - Documentación de ODFPy
openoffice.org (6)
Necesito manipular el formato de archivo ODF (formato de documento abierto, el formato interno de la oficina abierta), y debo hacerlo en Python.
Parece que ODFPy es una biblioteca maravillosa para este propósito. Desafortunadamente la documentación oficial es muy pobre, casi inútil. No puedo encontrar casi nada en línea, ¿quizás no sea tan popular?
¿Hay alguien que pueda señalarme alguna información o mejor documentación?
Bien, aquí hay una ayuda rápida:
Agarra el código fuente odfpy:
~$ svn checkout https://svn.forge.osor.eu/svn/odfpy/trunk odfpy
Instalarlo:
~$ cd odfpy ~/odfpy$ python setup.py install
Generar la documentación:
~/odfpy$ epydoc --pdf odf
He subido la documentación generada here .
Ejecute este sencillo programa de ejemplo:
from odf.opendocument import OpenDocumentText from odf.text import P textdoc = OpenDocumentText() p = P(text="Hello World!") textdoc.text.addElement(p) textdoc.save("helloworld", True)
Lee los ejemplos y trata de darle sentido a todo:
~/odfpy$ emacs examples/*.py
¡Espero que ayude! ¡Buena suerte!
Desafortunadamente, la documentación es horrible, y la envoltura de Python generada está mal documentada en código, proporcionando muchas funciones cuyas listas de argumentos parecen func (* args).
El manual de referencia es realmente útil, pero no cuando está comenzando, no proporciona ningún contexto sobre cómo usar estas funciones. Yo sugeriría comenzar con el tutorial y todos los examples . Aunque no tengan nada que ver con su caso de uso, le ayudarán a tener una idea de cómo funciona el paquete. Una vez que se haya acostumbrado a la forma en que está estructurado el paquete, a menudo puede entender la documentación combinando el documento de API con la información del libro de OpenDocument Essentials .
(En el mejor de los casos, la relación es algo tenue, pero a menudo se pueden intuir los valores de los métodos y los atributos. Al trabajar con la hoja de cálculo, por ejemplo, la práctica lista de datos de office: value-type en el libro proporcionó las constantes necesarias para construir adecuadamente Instancias de TableCell (valuetype = ...))
Además, crear documentos pequeños en OpenOffice y luego inspeccionar el xml y compararlo con el XML generado desde ODFPy le ayuda mucho a depurar dónde podría haber salido mal.
Encontré más documentación (el sitio web se ha reorganizado en los últimos años) en api-for-odfpy.odt .
Está desactualizado, un poco, pero podría ayudar a alguien. He encontrado una sola manera de trabajar con ODFPY:
- generar su documento ODF (es decir, f1.ods)
- haga una copia y edítela en LibreOffice / OpenOffice u otro (es decir, f2.odf)
- cambia ambos archivos a f1.zip y f2.zip
- extraer ambos archivos.
El formato y los datos principales se encuentran en "content.xml" y "styles.xml"
- compara ambos formatos
- hacer cambios en el script de Python
- itera 1-7 hasta que tengas suficiente resultado: D: D
Aquí hay un ejemplo de formato de fecha y hora, lo he hecho así:
from odf.opendocument import OpenDocumentSpreadsheet
from odf.style import Style, TableCellProperties
from odf.number import DateStyle, Text, Year, Month, Day, Hours, Minutes, Seconds
from odf.text import P
from odf.table import Table, TableRow, TableCell
# Generate document object
doc = OpenDocumentSpreadsheet()
table = Table(name="Exported data")
#create custom format in styles.xml
date_style = DateStyle(name="date-style1") #, language="lv", country="LV")
date_style.addElement(Year(style="long"))
date_style.addElement(Text(text=u"-"))
date_style.addElement(Month(style="long"))
date_style.addElement(Text(text=u"-"))
date_style.addElement(Day(style="long"))
date_style.addElement(Text(text=u" "))
date_style.addElement(Hours(style="long"))
date_style.addElement(Text(text=u":"))
date_style.addElement(Minutes(style="long"))
date_style.addElement(Text(text=u":"))
date_style.addElement(Seconds(style="long", decimalplaces="3"))
doc.styles.addElement(date_style)
#link to generated style from content.xml
ds = Style(name="ds1", datastylename="date-style1",parentstylename="Default", family="table-cell")
doc.automaticstyles.addElement(ds)
#create simple cell
tr = TableRow()
tc = TableCell(valuetype=''string'')
tc.addElement(P(text = "Date-Time"))
tr.addElement(tc)
table.addElement(tr)
#create cell with custom formatting
lineDT = #some date-time variable
tr = TableRow()
tc = TableCell(valuetype=''date'',datevalue = lineDT.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3],stylename=ds)
tc.addElement(P(text=lineDT.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]))
tr.addElement(tc)
table.addElement(tr)
#save ods
doc.spreadsheet.addElement(table)
doc.save("test.ods", True)
He actualizado el código, un poco, porque la versión anterior se abrió mal en el producto de MS.
Hay un buen ejemplo de uso de odfpy en http://mashupguide.net/1.0/html/ch17s04.xhtml