UnoGenerator is a powerful Python module designed to generate LibreOffice documents (ODT and ODS) programmatically with high performance and professional aesthetics.
Key features include:
- Professional Defaults: Automatic text wrapping (
word_wrap=True) and vertical centering for professional-looking reports out of the box. - High Performance: Optimized for large datasets. Inserting 10,000 rows with default formatting takes less than 0.3 seconds.
- Rich Exports: Easy export to
.xlsx,.docx, and.pdf. - Advanced Helpers: Flexible totals generation, automatic column width calculation, and complex data block handling.
- Multilingual Support: Built-in support for translations and localized document generation.
It uses the LibreOffice UNO module, requiring a LibreOffice installation on your system.
Only Linux is supported. See the installation guide for detailed instructions on main Linux distributions.
UnoGenerator follows a clean, template-based architecture:
- ODS/ODT: Generic base classes for document manipulation.
- ODS_Standard / ODT_Standard: Optimized subclasses that use the built-in professional templates, providing specific styles (like "Normal", "BoldCenter") and optimized row heights.
Create a professional ODT document with just a few lines:
from unogenerator import ODT_Standard
with ODT_Standard() as doc:
doc.addParagraph("Hello World", "Heading 1")
doc.addParagraph("Easy, isn't it", "Standard")
doc.save("hello_world.odt")
doc.export_docx("hello_world.docx")
doc.export_pdf("hello_world.pdf")Generate a styled spreadsheet with automatic wrapping and alignment:
from unogenerator import ODS_Standard
with ODS_Standard() as doc:
# word_wrap and vertical alignment are enabled by default
doc.addCellMergedWithStyle("A1:E1", "Sales Report 2026", style="BoldCenter")
doc.addRowWithStyle("A2", ["Product", "Quantity", "Price", "Total"])
doc.save("sales_report.ods")
doc.export_xlsx("sales_report.xlsx")UnoGenerator provides advanced helpers to generate calculations quickly:
from unogenerator import helpers
# Generates both row and column totals with a custom formula template
helpers.cross_totals_from_range(doc, "B2:D10", key="=SUM({}*1.21)")The package includes several useful CLI tools:
Monitors your LibreOffice server instances and their status.
Translate multiple ODT files using standard .pot and .po files.
unogenerator_translation --from_language es --to_language en --input original.odt --output_directory "translated"
Generate comprehensive example files and perform performance benchmarks on your system.
Full technical documentation is available in the doc directory, created using UnoGenerator itself.
