OfficeIMO - Open XML and document utilities for .NET
May 9, 2026 ยท View on GitHub
OfficeIMO is a family of COM-free .NET libraries for creating, reading, converting, and exporting Office and document-related formats. The main packages work directly with Open XML formats and are designed for server, desktop, CI, and PowerShell scenarios where Microsoft Office automation is not an option.
What is in this repo?
- Word: create, edit, inspect, and convert
.docxdocuments - Excel: create and modify
.xlsxworkbooks, worksheets, tables, ranges, styles, and reports - PowerPoint: generate
.pptxpresentations programmatically - Visio: create and validate basic
.vsdxdiagrams - Markdown: typed Markdown AST, builder APIs, HTML rendering, renderer shells, and host plug-ins
- Markup: Markdown-inspired authoring for Word, Excel, and PowerPoint exports
- Reader: read-only extraction facade plus modular adapters for ingestion pipelines
- PDF, ZIP, EPUB, CSV, and Drawing primitives used across the OfficeIMO family
- Google Workspace bridges for Google Docs and Google Sheets export planning
Most packages are MIT licensed. OfficeIMO.Visio is a special case: the project file currently declares MIT package metadata, while the project folder still carries a restrictive LICENSE.MD; treat Visio licensing as unresolved until that conflict is corrected.
Project READMEs
Core document packages
- OfficeIMO.Word
- OfficeIMO.Excel
- OfficeIMO.PowerPoint
- OfficeIMO.Visio
- OfficeIMO.CSV
- OfficeIMO.Drawing
- OfficeIMO.Pdf
- OfficeIMO.Zip
- OfficeIMO.Epub
Conversion packages
Markdown and rendering packages
- OfficeIMO.Markdown
- OfficeIMO.MarkdownRenderer
- OfficeIMO.MarkdownRenderer.Wpf
- OfficeIMO.MarkdownRenderer.IntelligenceX
- OfficeIMO.MarkdownRenderer.SamplePlugin
- OfficeIMO.Markdown.Benchmarks
Reader and ingestion packages
- OfficeIMO.Reader
- OfficeIMO.Reader.Csv
- OfficeIMO.Reader.Epub
- OfficeIMO.Reader.Html
- OfficeIMO.Reader.Json
- OfficeIMO.Reader.Text
- OfficeIMO.Reader.Xml
- OfficeIMO.Reader.Zip
Authoring and export packages
- OfficeIMO.Markup
OfficeIMO.Markup.WordOfficeIMO.Markup.ExcelOfficeIMO.Markup.PowerPointOfficeIMO.Markup.Cli
Google Workspace packages
Examples, benchmarks, and release notes
- OfficeIMO.Examples
- OfficeIMO.Excel.Benchmarks
- Docs/officeimo.excel.release-checklist.md
- Docs/officeimo.markdown.release-checklist.md
- CHANGELOG.MD
Website
- Public site content and GitHub Pages deployment live under Website/
- Maintainer notes for the website pipeline and API ingestion live in Docs/officeimo.website.md
Package families
Word family
OfficeIMO.Word: main Word document object modelOfficeIMO.Word.Html: Word to/from HTML conversion helpersOfficeIMO.Word.Markdown: Word to/from Markdown conversion helpersOfficeIMO.Word.Pdf: Word to PDF export via QuestPDF and SkiaSharp
Excel family
OfficeIMO.Excel: workbook, worksheet, table, range, style, and reporting helpersOfficeIMO.Excel.GoogleSheets: Excel to Google Sheets planning, batch compilation, and export helpersOfficeIMO.Excel.Benchmarks: benchmark harness for Excel package behavior
Google Workspace family
OfficeIMO.GoogleWorkspace: shared credentials, session, Drive location, retry, and translation-report abstractionsOfficeIMO.Word.GoogleDocs: Word to Google Docs planning, batch compilation, and export helpersOfficeIMO.Excel.GoogleSheets: Excel to Google Sheets planning, batch compilation, and export helpers
Markdown family
OfficeIMO.Markdown: Markdown builder, typed reader/AST, HTML renderer, front matter, TOC, callouts, and query helpersOfficeIMO.Markdown.Html: HTML-to-Markdown AST bridge targeting the OfficeIMO Markdown document modelOfficeIMO.MarkdownRenderer: WebView/browser-friendly rendering shell and incremental update helpersOfficeIMO.MarkdownRenderer.Wpf: reusable WPF/WebView2MarkdownViewhostOfficeIMO.MarkdownRenderer.IntelligenceX: first-party IntelligenceX renderer feature packOfficeIMO.MarkdownRenderer.SamplePlugin: sample renderer plug-in packageOfficeIMO.Markdown.Benchmarks: representative parse/render benchmark harness
Markup family
OfficeIMO.Markup: Markdown-inspired semantic authoring layer for OfficeIMO documentsOfficeIMO.Markup.Word: Word exporter for markup documentsOfficeIMO.Markup.Excel: Excel exporter for markup workbooksOfficeIMO.Markup.PowerPoint: PowerPoint exporter for markup presentationsOfficeIMO.Markup.Cli: command-line parser, validator, emitter, and exporter
Reader family
OfficeIMO.Reader: read-only facade for deterministic ingestionOfficeIMO.Reader.Csv: CSV adapterOfficeIMO.Reader.Epub: EPUB adapterOfficeIMO.Reader.Html: HTML adapter through the Markdown HTML bridgeOfficeIMO.Reader.Json: JSON adapterOfficeIMO.Reader.Text: structured text compatibility adapterOfficeIMO.Reader.Xml: XML adapterOfficeIMO.Reader.Zip: ZIP adapter
Other packages
OfficeIMO.CSV: typed CSV read/write and schema workflowsOfficeIMO.Drawing: first-party color and image metadata primitivesOfficeIMO.Pdf: dependency-free PDF builder using PDF standard fontsOfficeIMO.PowerPoint: programmatic PowerPoint slide generationOfficeIMO.Visio: basic Visio diagram generation and validationOfficeIMO.Zip: safe ZIP traversal primitivesOfficeIMO.Epub: EPUB extraction primitives
Target frameworks
Most shipping libraries target netstandard2.0, net8.0, and net10.0. Many projects also add net472 when building on Windows, which preserves .NET Framework support without making that target the cross-platform baseline.
Important exceptions:
OfficeIMO.CSVincludesnet472directly.OfficeIMO.MarkdownRenderer.Wpftargetsnet472,net8.0-windows, andnet10.0-windowsfor the WPF/WebView2 surface, plus non-Windowsnet8.0andnet10.0helper targets.- CLI, benchmark, example, and test projects generally target modern .NET only.
AOT and trimming
- Reflection-heavy convenience APIs remain available for dynamic and PowerShell scenarios.
- For trimming-sensitive workloads, prefer typed overloads and explicit selectors.
OfficeIMO.Markdown,OfficeIMO.CSV,OfficeIMO.Drawing,OfficeIMO.Pdf,OfficeIMO.Zip, andOfficeIMO.Epubare the lightest dependency shapes.- Open XML-heavy packages should be tested against the exact publish options and document features your application uses.
OfficeIMO.Word.Pdfshould be treated separately because QuestPDF and SkiaSharp add a larger rendering/runtime surface.
Dependencies at a glance
Arrows point from a package to what it depends on. Test, benchmark, and example-only dependencies are intentionally excluded unless called out.
Word and conversion
flowchart TB Word["OfficeIMO.Word"] Drawing["OfficeIMO.Drawing"] WordHtml["OfficeIMO.Word.Html"] WordMarkdown["OfficeIMO.Word.Markdown"] WordPdf["OfficeIMO.Word.Pdf"] Markdown["OfficeIMO.Markdown"] MarkdownHtml["OfficeIMO.Markdown.Html"] OpenXml["DocumentFormat.OpenXml"] Angle["AngleSharp"] AngleCss["AngleSharp.Css"] Quest["QuestPDF"] Skia["SkiaSharp"] Word --> Drawing Word --> OpenXml WordHtml --> Word WordHtml --> Drawing WordHtml --> OpenXml WordHtml --> Angle WordHtml --> AngleCss WordMarkdown --> Word WordMarkdown --> WordHtml WordMarkdown --> Markdown WordMarkdown --> MarkdownHtml WordMarkdown --> Drawing WordPdf --> Word WordPdf --> Quest WordPdf --> Skia
Excel, PowerPoint, Visio, and primitives
flowchart TB Excel["OfficeIMO.Excel"] PowerPoint["OfficeIMO.PowerPoint"] Visio["OfficeIMO.Visio"] Drawing["OfficeIMO.Drawing"] OpenXml["DocumentFormat.OpenXml"] Packaging["System.IO.Packaging"] Csv["OfficeIMO.CSV"] Pdf["OfficeIMO.Pdf"] Zip["OfficeIMO.Zip"] Epub["OfficeIMO.Epub"] Excel --> Drawing Excel --> OpenXml PowerPoint --> OpenXml Visio --> Drawing Visio --> Packaging
OfficeIMO.CSV, OfficeIMO.Drawing, OfficeIMO.Pdf, OfficeIMO.Zip, and OfficeIMO.Epub are dependency-light first-party packages. Color and image metadata live in OfficeIMO.Drawing, and Excel text measurement is handled by first-party code.
Markdown, renderer, and markup
flowchart TB Markdown["OfficeIMO.Markdown"] MarkdownHtml["OfficeIMO.Markdown.Html"] Renderer["OfficeIMO.MarkdownRenderer"] RendererWpf["OfficeIMO.MarkdownRenderer.Wpf"] RendererIx["OfficeIMO.MarkdownRenderer.IntelligenceX"] RendererSample["OfficeIMO.MarkdownRenderer.SamplePlugin"] Markup["OfficeIMO.Markup"] MarkupWord["OfficeIMO.Markup.Word"] MarkupExcel["OfficeIMO.Markup.Excel"] MarkupPowerPoint["OfficeIMO.Markup.PowerPoint"] MarkupCli["OfficeIMO.Markup.Cli"] Word["OfficeIMO.Word"] Excel["OfficeIMO.Excel"] PowerPoint["OfficeIMO.PowerPoint"] Angle["AngleSharp"] Json["System.Text.Json"] WebView2["Microsoft.Web.WebView2"] MarkdownHtml --> Markdown MarkdownHtml --> Angle Renderer --> Markdown Renderer --> MarkdownHtml Renderer --> Json RendererWpf --> Renderer RendererWpf --> WebView2 RendererIx --> Renderer RendererIx --> MarkdownHtml RendererSample --> Renderer RendererSample --> MarkdownHtml RendererSample --> Json Markup --> Markdown MarkupWord --> Markup MarkupWord --> Word MarkupExcel --> Markup MarkupExcel --> Excel MarkupPowerPoint --> Markup MarkupPowerPoint --> PowerPoint MarkupCli --> Markup MarkupCli --> MarkupWord MarkupCli --> MarkupExcel MarkupCli --> MarkupPowerPoint
Reader and Google Workspace
flowchart TB Reader["OfficeIMO.Reader"] ReaderCsv["OfficeIMO.Reader.Csv"] ReaderEpub["OfficeIMO.Reader.Epub"] ReaderHtml["OfficeIMO.Reader.Html"] ReaderJson["OfficeIMO.Reader.Json"] ReaderText["OfficeIMO.Reader.Text"] ReaderXml["OfficeIMO.Reader.Xml"] ReaderZip["OfficeIMO.Reader.Zip"] Word["OfficeIMO.Word"] WordMarkdown["OfficeIMO.Word.Markdown"] Excel["OfficeIMO.Excel"] PowerPoint["OfficeIMO.PowerPoint"] Markdown["OfficeIMO.Markdown"] Pdf["OfficeIMO.Pdf"] Csv["OfficeIMO.CSV"] Epub["OfficeIMO.Epub"] Zip["OfficeIMO.Zip"] MarkdownHtml["OfficeIMO.Markdown.Html"] Google["OfficeIMO.GoogleWorkspace"] GoogleDocs["OfficeIMO.Word.GoogleDocs"] GoogleSheets["OfficeIMO.Excel.GoogleSheets"] Json["System.Text.Json"] Reader --> Word Reader --> WordMarkdown Reader --> Excel Reader --> PowerPoint Reader --> Markdown Reader --> Pdf Reader --> Json ReaderCsv --> Reader ReaderCsv --> Csv ReaderEpub --> Reader ReaderEpub --> Epub ReaderHtml --> Reader ReaderHtml --> MarkdownHtml ReaderJson --> Reader ReaderJson --> Json ReaderText --> Reader ReaderText --> ReaderCsv ReaderText --> ReaderJson ReaderText --> ReaderXml ReaderXml --> Reader ReaderZip --> Reader ReaderZip --> Zip GoogleDocs --> Google GoogleDocs --> Word GoogleDocs --> Json GoogleSheets --> Google GoogleSheets --> Excel GoogleSheets --> Json
When do I need what?
- Creating or editing Word documents: add
OfficeIMO.Word - Word to HTML: add
OfficeIMO.WordandOfficeIMO.Word.Html - Word to Markdown or Markdown to Word: add
OfficeIMO.Word,OfficeIMO.Word.Markdown, and the Markdown packages it references - Word to PDF: add
OfficeIMO.WordandOfficeIMO.Word.Pdf - Creating Excel workbooks and reports: add
OfficeIMO.Excel - Creating PowerPoint decks: add
OfficeIMO.PowerPoint - Creating Visio diagrams: add
OfficeIMO.Visio - Working directly with Markdown: add
OfficeIMO.Markdown - Hosting Markdown in a browser/WebView shell: add
OfficeIMO.MarkdownRenderer - Hosting Markdown in a WPF app: add
OfficeIMO.MarkdownRenderer.Wpf - Adding IntelligenceX-oriented renderer behavior: add
OfficeIMO.MarkdownRenderer.IntelligenceX - Authoring Office files from
.omdmarkup: useOfficeIMO.Markupplus the Word, Excel, or PowerPoint exporter package - Ingesting documents for indexing, chat, or search: add
OfficeIMO.Readerand only the adapter packages your host needs - Shared Google Workspace session/auth primitives: add
OfficeIMO.GoogleWorkspace - Word to Google Docs planning/export: add
OfficeIMO.WordandOfficeIMO.Word.GoogleDocs - Excel to Google Sheets planning/export: add
OfficeIMO.ExcelandOfficeIMO.Excel.GoogleSheets - CSV schemas and typed CSV workflows: add
OfficeIMO.CSV - Dependency-light PDF generation without Word conversion: add
OfficeIMO.Pdf - Safe ZIP or EPUB traversal/extraction primitives: add
OfficeIMO.ZiporOfficeIMO.Epub
Dependency versions, high level
DocumentFormat.OpenXml:[3.5.1, 4.0.0)in the Open XML packages that reference itOfficeIMO.Drawing: first-party color and image metadata helpersAngleSharp/AngleSharp.Css: HTML parsing and CSS conversion layersQuestPDF/SkiaSharp: Word-to-PDF conversion layer onlySystem.Text.Json: reader, renderer, and Google Workspace helper surfaces on legacy target frameworksMicrosoft.Web.WebView2: WPF Markdown renderer hostSystem.IO.Packaging: Visio package handling
See each project .csproj for exact package ranges.
Support this project
If you find this project helpful, please consider supporting its development. Sponsorship helps the maintainers spend more time on maintenance, documentation, tests, and new features.
Sponsorship is optional. OfficeIMO remains open source and available for anyone to use regardless of sponsorship.
Please share with the community
Please consider sharing a post about OfficeIMO and the value it provides. It really does help.