A high-performance Rust library for parsing Microsoft Office file formats (OLE2 and OOXML), OpenDocument formats (ODF), and Apple iWork files. Supports .doc, .docx, .xls, .xlsx, .ppt, .pptx, .odt, .ods, .odp, .pages, .numbers, and .key files.
Warning
Note
The current logo is generated by AI, we need someone to design a better logo. If you are interested, please contact me via email.
- Complete CRUD Operations - Create, read, update, and save Office documents (.docx, .xlsx, .pptx)
- Unified API - Same interface for legacy and modern formats with automatic format detection
- Microsoft Office - Full support for .doc, .docx, .xls, .xlsx, .xlsb, .ppt, .pptx files
- OpenDocument - Parse .odt, .ods, .odp files (ODF format)
- Apple iWork - Parse .pages, .numbers, .key files (IWA format)
- Formula Conversion - Parse MathType and Office MathML equations and convert to LaTeX
- Markdown Conversion - Convert documents and presentations to Markdown format
- Memory Efficient - Direct byte buffer support with zero-copy parsing where possible
- High Performance - SIMD optimizations, minimal allocations, efficient memory layout
use litchi::{Document, Presentation};
// Microsoft Office formats - format auto-detected
let doc = Document::open("document.doc")?; // .doc or .docx
let text = doc.text()?;
let pres = Presentation::open("slides.ppt")?; // .ppt or .pptx
let slide_count = pres.slide_count()?;
// Excel spreadsheets
use litchi::sheet::open_xls_workbook;
let workbook = open_xls_workbook("spreadsheet.xls")?;
let worksheet = workbook.worksheet_by_name("Sheet1")?;use litchi::ooxml::docx::Package;
use litchi::ooxml::xlsx::Workbook;
use litchi::ooxml::pptx::Package as PptxPackage;
// Create Word document
let mut pkg = Package::new()?;
let doc = pkg.document_mut()?;
doc.add_heading("My Document", 1)?;
doc.add_paragraph_with_text("Hello, World!");
pkg.save("output.docx")?;
// Create Excel workbook
let mut wb = Workbook::create()?;
let ws = wb.worksheet_mut(0)?;
ws.set_cell_value(1, 1, "Hello");
ws.set_cell_value(1, 2, "World");
wb.save("output.xlsx")?;
// Create PowerPoint presentation
let mut pkg = PptxPackage::new()?;
let pres = pkg.presentation_mut()?;
let slide = pres.add_slide()?;
slide.set_title("My Presentation");
pkg.save("output.pptx")?;// OpenDocument formats (requires "odf" feature)
#[cfg(feature = "odf")]
{
use litchi::odf;
let odt = odf::Document::open("document.odt")?;
let text = odt.text()?;
}
// Apple iWork formats (requires "iwa" feature)
#[cfg(feature = "iwa")]
{
use litchi::iwa;
let pages = iwa::Document::open("document.pages")?;
let text = pages.text()?;
}
// Formula conversion (requires "formula" feature)
#[cfg(feature = "formula")]
{
use litchi::formula;
let latex = formula::mathml_to_latex("<math>...</math>")?;
}Add to your Cargo.toml:
[dependencies]
litchi = "0.0.1"
# Or use the development version
litchi = { git = "https://github.com/DevExzh/litchi.git" }By default, only Microsoft Office formats are enabled (ole and ooxml features). Enable additional features as needed:
[dependencies]
# Enable all features
litchi = { version = "0.0.1", features = ["odf", "iwa", "formula", "imgconv"] }
# Or enable specific features
litchi = { version = "0.0.1", features = ["odf"] } # OpenDocument support
litchi = { version = "0.0.1", features = ["iwa"] } # Apple iWork support
litchi = { version = "0.0.1", features = ["formula"] } # Formula parsing and LaTeX conversion
litchi = { version = "0.0.1", features = ["imgconv"] } # Image conversion supportAvailable Features:
ole(default) - Legacy Office formats (.doc, .xls, .ppt)ooxml(default) - Modern Office formats (.docx, .xlsx, .pptx)odf- OpenDocument formats (.odt, .ods, .odp)iwa- Apple iWork formats (.pages, .numbers, .key)formula- MathType and Office MathML to LaTeX conversionimgconv- Image format conversion (EMF, WMF, PICT to PNG/JPEG/WebP)
- API Reference - Complete API documentation
- OFFICE_API_GUIDE.md - Comprehensive guide with examples
- FEATURE_MATRIX.md - Feature comparison with Apache POI
- Examples - Working code examples:
office_crud_demo.rs- Complete CRUD operations demo
Fully Implemented:
- ✅ CRUD Operations - Create, read, and update .docx, .xlsx, .pptx files
- ✅ Reading - Full support for .doc, .docx, .xls, .xlsx, .xlsb, .ppt, .pptx
- ✅ Writing - Document creation and modification for OOXML formats
- ✅ Text & Formatting - Paragraphs, runs, tables, cells, basic styling
- ✅ OpenDocument - Read .odt, .ods, .odp files
- ✅ Apple iWork - Read .pages, .numbers, .key files
- ✅ Formula Parsing - MathType and MathML to LaTeX conversion
- ✅ Markdown Export - Convert documents and presentations to Markdown
In Progress:
- 🟡 Advanced formatting (cell styles, conditional formatting)
- 🟡 Charts and embedded objects
- 🟡 Headers, footers, comments
- 🟡 Document protection and security features
See docs/FEATURE_MATRIX.md for a detailed feature comparison with Apache POI.
Licensed under the Apache License, Version 2.0.
This library is built upon the work of many open-source projects. We are grateful to the following projects for their research, documentation, and reference implementations:
Microsoft Office Formats:
- Apache POI - Java library for Microsoft Office formats
- python-docx - Python library for DOCX files
- python-pptx - Python library for PPTX files
- openpyxl - Python library for XLSX files
- calamine - Rust Excel/ODS reader
- pyxlsb2 - Python XLSB parser
- xlrd - Python library for reading Excel files
OpenDocument Formats:
Apple iWork Formats:
- libetonyek - Library for Apple Keynote presentations
- iWorkFileFormat - iWork file format documentation
- pyiwa - Python iWork Archive parser
RTF Formats:
- rtf2latex2e - RTF to LaTeX converter
- RtfDomParser - RTF parser
Formula Conversion:
- plurimath - Multi-format mathematical formula converter
Image Conversion:
- libemf2svg - EMF/WMF to SVG conversion
- libwmf - Windows Metafile library
- pict2png - PICT to PNG conversion
Utilities:
Specifications:
All projects retain their original licenses.
