Project Overview
Executive summary
Structured document output with headings, paragraphs, tables, images, and metadata.
Build, convert, inspect, and automate Word, Excel, PowerPoint, PDF, OpenDocument, email, Markdown, and more from .NET or PowerShell.
Structured document output with headings, paragraphs, tables, images, and metadata.
Repeatable presentations from application data.
using var doc =
WordDocument.Create("report.docx");
doc.AddParagraph("Quarterly report");
doc.Save();Build Word, Excel, PowerPoint, PDF, Visio, Markdown, CSV, and other document formats from typed .NET APIs.
Move content between Office, PDF, HTML, Markdown, OpenDocument, RTF, and Google Workspace with focused converter packages.
Normalize text, tables, metadata, images, and chunks for search, review, ingestion, and AI-assisted workflows.
Use PSWriteOffice for scheduled reports, administration scripts, build pipelines, and repeatable document jobs.
Product family
Install only the document engines, converters, readers, or automation surfaces your application needs.
Build the document your application needs with a native, typed model.
Create and edit DOCX documents with a focused object model.
Read and write XLSX workbooks, tables, charts, and formulas.
Generate PPTX presentations with slides, charts, notes, and shapes.
Create, inspect, edit, merge, sign, validate, and render PDF files.
Work with native OneNote sections, notebooks, tables of contents, and packages offline.
Move structured content across document, web, and interchange formats with explicit diagnostics.
Read and write email, Outlook items, mailbox stores, calendars, and contacts.
Create and edit ODT, ODS, and ODP without LibreOffice or Office.
Parse HTML and MHTML, apply resource policy, and render to document or image formats.
Read, create, preserve, and convert RTF with bounded parsing and fidelity reports.
Extract EPUB metadata, navigation, chapters, and bounded resources.
Build, parse, transform, and render Markdown with a typed AST.
Create VSDX diagrams with pages, shapes, connectors, and metadata.
Read heterogeneous files, connect Google Workspace, or run the same capabilities from PowerShell.
Extract normalized text, tables, metadata, assets, and chunks across document families.
Translate Office content to and from Docs, Sheets, and Slides with explicit fidelity decisions.
Create, convert, and inspect documents from PowerShell scripts and automation jobs.
Call focused .NET packages from applications and services, or use PSWriteOffice for script-first document automation.
using var doc = WordDocument.Create("report.docx");
var paragraph = doc.AddParagraph("Quarterly Sales Report");
paragraph.Style = WordParagraphStyle.Heading1;
doc.AddParagraph("Generated automatically with OfficeIMO.Word.");
var table = doc.AddTable(4, 3);
table.Rows[0].Cells[0].Paragraphs[0].Text = "Region";
table.Rows[0].Cells[1].Paragraphs[0].Text = "Revenue";
table.Rows[0].Cells[2].Paragraphs[0].Text = "Growth";
table.Rows[0].IsHeader = true;
table.Rows[1].Cells[0].Paragraphs[0].Text = "North America";
table.Rows[1].Cells[1].Paragraphs[0].Text = "$1,250,000";
table.Rows[1].Cells[2].Paragraphs[0].Text = "+12%";
doc.Save();using var doc = ExcelDocument.Load("sales-data.xlsx");
var sheet = doc.WorkSheets[0];
// Read typed data from rows
var rows = sheet.RowsAs(r => new SalesRecord {
Region = r.String("Region"),
Revenue = r.Decimal("Revenue"),
Growth = r.Double("Growth")
});
// Add a summary chart
var chart = sheet.AddChart(ExcelChartType.ColumnClustered);
chart.Title = "Revenue by Region";
chart.AddSeries("Revenue", rows.Select(r => r.Revenue));
doc.Save("sales-report.xlsx"); PowerPointDesignBrief brief = PowerPointDesignBrief
.FromBrand("#008C95", "client-demo", "technical rollout proposal")
.WithIdentity("Client Theme", footerLeft: "CLIENT", footerRight: "Service deck")
.WithVariety(PowerPointDesignVariety.Exploratory);
var plan = new PowerPointDeckPlan()
.AddSection("Service proposal", "Generated from a semantic plan.")
.AddProcess("Implementation path", "The selected design handles layout.", new[] {
new PowerPointProcessStep("Discover", "Collect constraints."),
new PowerPointProcessStep("Design", "Choose the target model."),
new PowerPointProcessStep("Roll out", "Deliver in waves.")
});
var best = brief.DescribeDeckPlanAlternatives(plan, 3)
.OrderByDescending(alternative => alternative.ContentFitScore)
.First();
using var ppt = PowerPointPresentation.Create("proposal.pptx");
ppt.SlideSize.SetPreset(PowerPointSlideSizePreset.Screen16x9);
ppt.UseDesigner(brief, best.Index).AddSlides(plan);
ppt.Save();var doc = MarkdownDoc.Create()
.H1("Release Notes")
.P("Version 2.0 brings major improvements.")
.H2("New Features")
.BulletList(
"Parallel Excel operations",
"PowerPoint chart support",
"AOT-ready CSV module"
)
.H2("Performance")
.Table(t => t.FromSequence(benchmarks,
("Scenario", b => b.Name),
("Before", b => b.Before),
("After", b => b.After)
));
var html = doc.ToHtmlFragment();
File.WriteAllText("release-notes.md", doc.ToString());New-OfficeWord -FilePath 'Report.docx' {
WordSection {
WordParagraph -Text 'Monthly Report' -Style Heading1
WordParagraph -Text 'Generated with PSWriteOffice'
WordTable -DataTable $SalesData -Style LightGrid
}
}
New-OfficeExcel -FilePath 'Data.xlsx' {
ExcelSheet -Name 'Sales' {
ExcelTable -DataTable $Records -AutoFilter -AutoFit
}
ExcelSheet -Name 'Charts' {
ExcelChart -Type ColumnClustered -Title 'Revenue'
}
}Run the example, inspect the source, and download the real output. Each card states what the evidence proves and where fidelity is intentionally bounded.

Generate editable slides from a brand brief, rank deterministic design alternatives, and validate the resulting Open XML package.

Build a dependency-free PDF report with branded sections, summary metrics, tables, drawing primitives, and page-aware layout.

Parse a styled invoice once, apply an explicit resource and layout policy, and produce PDF, PNG, or SVG output through the shared renderer.

Create an editable workbook with typed values, formulas, a table, chart, and pivot metadata, then inspect export readiness before delivery.
No. OfficeIMO works entirely with Open XML standards and does not require Microsoft Office, COM automation, or any Office interop assemblies. It runs on any platform where .NET is available.
OfficeIMO targets .NET 8.0, .NET 10.0, .NET Standard 2.0, and .NET Framework 4.7.2. This means it works with .NET Core, .NET 5+, and legacy .NET Framework projects.
Yes. The OfficeIMO packages themselves are published under the MIT License. However, some optional package families build on third-party dependencies with their own upstream terms, so commercial teams should also review our Third-Party Dependencies page during OSS approval.
OfficeIMO is an open-source MIT-licensed option focused on COM-free Open XML workflows, while products like Aspose or GemBox are commercial suites with broader vendor support and different format coverage. Pricing, editions, and support terms change over time, so verify current details with each vendor directly. Our comparison page focuses on trade-offs rather than fixed price claims.
Yes. Because OfficeIMO is COM-free and runs on .NET, it fits well in Linux containers, GitHub Actions, Azure DevOps, and other CI/CD environments. For rendering-heavy scenarios such as PDF output, validate the fonts and native dependencies you plan to ship with your container image.
Free, open source, and MIT licensed. Install in seconds.
dotnet add package OfficeIMO.Word Install-Module PSWriteOffice