Salida formateada en OpenOffice / Microsoft Word con Python

Estoy trabajando en un proyecto (en Python) que necesita resultados editables y con formato. Dado que el usuario final no va a ser técnicamente competente, la salida debe estar en un formato editable de procesador de textos. El formato es complejo (viñetas, párrafos, negrita, etc.).

¿Hay una manera de generar un informe de este tipo utilizando Python? Siento que debería haber una manera de hacer esto usando las plantillas de Microsoft Word / OpenOffice y Python, pero no puedo encontrar nada lo suficientemente avanzado para obtener un buen formato. ¿Alguna sugerencia?

Un dato poco conocido y algo malvado: si creas un archivo HTML y pegas una extensión .doc en él, Word lo abrirá como un documento de Word y la mayoría de los usuarios no sabrán nada.

Excepto que tal vez dirá una persona muy técnica, ¡este es un pequeño archivo de Word! 🙂

“El formato es complejo (viñetas, párrafos, negrita, etc.)”

Utilice RST .

Es trivial de producir, ya que es texto plano.

Es trivial de editar, ya que es texto sin formato con algunos caracteres adicionales para proporcionar información estructural.

Se formatea muy bien con un montón de herramientas .

Utilice el módulo Docx de Python para esto: 100% Python, tablas, imágenes, propiedades de documentos, encabezados, párrafos y más.

Sé que hay un odtwriter para docutils . Podría generar su salida como reStructuredText y enviarla a odtwriter o mirar qué odtwriter está utilizando en el backend para generar el ODT y usarlo.

(Probablemente me gustaría generar la primera salida y luego hackear el odtwriter para generar las cosas que quiero (y contribuir con las correcciones al proyecto), porque probablemente sea mucho más fácil que intentar renderizar tus cosas directamente a ODT).

He usado xlwt para crear documentos de Excel usando python, pero no he necesitado escribir archivos de Word todavía. He encontrado este paquete, OOoPy , pero no lo he usado.

También es posible que desee probar la salida de archivos html y que los usuarios los abran en Word.

Puede usar QTextDocument, QTextCursor y QTextDocumentWriter en PyQt4 . Un ejemplo simple para mostrar cómo escribir en un archivo odt:

>>>from pyqt4 import QtGui # Create a document object >>>doc = QtGui.QTextDocument() # Create a cursor pointing to the beginning of the document >>>cursor = QtGui.QTextCursor(doc) # Insert some text >>>cursor.insertText('Hello world') # Create a writer to save the document >>>writer = QtGui.QTextDocumentWriter() >>>writer.supportedDocumentFormats() [PyQt4.QtCore.QByteArray(b'HTML'), PyQt4.QtCore.QByteArray(b'ODF'), PyQt4.QtCore.QByteArray(b'plaintext')] >>>odf_format = writer.supportedDocumentFormats()[1] >>>writer.setFormat(odf_format) >>>writer.setFileName('hello_world.odt') >>>writer.write(doc) # Return True if successful True 

QTextCursor también puede insertar tablas, marcos, bloques, imágenes. Más información en: http://qt-project.org/doc/qt-4.8/qtextcursor.html

Como beneficio adicional, también puede imprimir en un archivo pdf utilizando QPrinter.

Creo que OpenOffice tiene algunos enlaces de Python: deberías poder escribir macros OO en Python.

Pero usaría HTML en su lugar: Word y OO.org son bastante buenos para editarlo y puede escribirlo desde Python fácilmente (aunque Word ahorra muchos problemas, lo que podría complicar el análisis de la aplicación Python).