Limitations

This page documents known limitations and missing features that may affect real-world use. Check Format Coverage for the full status matrix.

Critical Gaps

Formula Evaluation

dotnet-poi can write formula text and preserve cached values, but full formula evaluation is permanently deferred. This means:

Chart Creation

Charts in xlsx and pptx are preserved on round-trip but cannot be created or edited programmatically. If your workflow requires generating chart visuals from data, this is not yet supported.

docx Comments

Existing docx comments are preserved on round-trip, and dotnet-poi exposes a minimal XWPF comment API for comment metadata/text, paragraph/run marker reference ids, metadata/text editing, and paragraph range comment creation. Rich comment body content, arbitrary range editing, and cleanup-heavy marker deletion remain limited. xlsx cell comments are different: common read/create/edit/remove workflows are modeled through XSSFComment, cell/sheet lookup, and VML/comment part write/read, with rich formatting and VML shape styling still minimal.

docx Style Editing

Paragraph style references are supported with setStyle() / getStyleID(), and word/styles.xml is read or generated for new documents. Character styles, table styles, and full Word style inheritance are not yet editable or evaluated by dotnet-poi.

docx Table Styling

docx tables support basic creation, width, grid columns, row height, header rows, cell width, horizontal grid span, vertical merge, and vertical alignment. Detailed border and shading creation is not yet exposed as an API, but existing tblPr / trPr / tcPr children are preserved as raw XML during round-trip.

docx Tracked Changes

Tracked-change XML such as w:ins, w:del, and move ranges is preserved as raw XML in body/paragraph child order during read/write round-trip. This is preservation-only: dotnet-poi does not expose accept/reject, create/edit, author/date editing, or semantic merge behavior for revisions.

Moderate Gaps

FeatureFormatImpact
Comments APIdocxExisting comments are preserved on round-trip and can be read through minimal XWPF APIs, but cannot be created or edited through public XWPF APIs
Content controls (SDT)docxBlock-level and inline SDT are preserved on round-trip but cannot be edited through a public API
Track changes APIdocxRevision markup is preserved on round-trip, but accept/reject/create/edit APIs are not supported
Grouped shapespptxPreserved as raw spTree XML but cannot be edited through a public API
Notes slidespptxExisting notes slides are preserved but cannot be created or read through a public API
SparklinesxlsxIn-cell sparkline charts not supported
External data connectionsxlsxExisting connection parts are preserved but cannot be edited through a public API
HSSF advanced object modelxlsBasic workbook values, styles/layout slices, interop, and preservation exist, but images, charts, comment editing, filters, pivots, and new formula writing are not modeled
HWPF advanced object modeldocBody/header/footer/table text extraction and limited body edits work, but images, footnotes, comments, and fields are not modeled through public APIs

Minor Gaps

FeatureFormatNotes
Auto-shapesxlsxPreserved as unknown DrawingML XML; only pictures are modeled
SmartArt editingpptxPreserved as unknown parts
Animations/transitions editingpptxPreserved as unknown parts
Theme editingpptxLayout/master/theme preserved but not editable
Password hashingxlsxProtection on/off works; password hash not implemented
ppt (HSLF)pptText extraction and no-op preservation exist; new slide creation and shape/image editing are not modeled

When to Use Java POI Instead

If your project depends on any of the following, consider using Apache POI (Java) directly or bridging via a microservice: