Project Overview
Executive summary
Structured document output with headings, paragraphs, tables, images, and metadata.
Use typed .NET packages for documented DOC, XLS, XLSB, PPT, and modern Office workflows. Use PSWriteOffice for PowerShell authoring, inspection, and conversion — all without Microsoft Office.
Structured document output with headings, paragraphs, tables, images, and metadata.
Repeatable presentations from application data.
using var doc =
WordDocument.Load("legacy.doc");
doc.Save("modern.docx");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, work with supported DOC and template subsets, and inspect explicit compatibility diagnostics.
Create and edit XLSX, work with supported XLS and XLSB subsets, and inspect conversion diagnostics without Excel.
Create and edit PPTX and work with supported PPT, PPS, and POT subsets through preservation-aware legacy handling.
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<SalesRecord>(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 -InputObject $SalesData -Style LightGrid
}
}
New-OfficeExcel -FilePath 'Data.xlsx' {
ExcelSheet -Name 'Sales' {
ExcelTable -InputObject $Records -TableName 'SalesTable' -AutoFit
ExcelChart -TableName 'SalesTable' -Row 2 -Column 8 -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.

Render one stylesheet-authored document through a bounded managed pipeline with layered CSS, document layout, vector paint, MathML, and native PDF fields.

Bind encoded purchase rows outside the renderer, then produce a multi-page PDF with wrapped cells, repeated table headers, page counters, and a one-time totals block. PNG and SVG use the same parsed HTML and layout policy.
No. OfficeIMO uses managed document engines and focused package dependencies; it does not require Microsoft Office, COM automation, or Office interop assemblies at runtime. Optional desktop Office checks are validation oracles, not runtime dependencies.
OfficeIMO classifies and reads modern and legacy Word, Excel, and PowerPoint families, writes documented native subsets, and reports conversion coverage by operation and fidelity. Use the compatibility dashboard for tracked behaviors, fallbacks, and deliberate blocks.
OfficeIMO targets .NET 8.0, .NET 10.0, .NET Standard 2.0, and .NET Framework 4.7.2.
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 MIT-licensed, source-available document platform for .NET and PowerShell with modern and legacy Office support, focused packages, explicit conversion-fidelity policies, and no runtime royalty. Commercial suites can provide broader portfolio coverage, more mature rendering for some workloads, formal support, and procurement SLAs. Compare the exact formats, operations, fidelity, deployment model, and support obligations your application needs on our evaluation page.
Free, open source, and MIT licensed. Install in seconds.
dotnet add package OfficeIMO.Word Install-Module PSWriteOffice