Changelog
[3.4.3] - May 6, 2026
- fix(pptx): fix
ArgumentNullExceptioninFluentPresentationBuilderwhen slides have null data (#256) - fix(word): rely on SDK 3.x built-in handling for invalid hyperlink URIs — removes manual
UriFixerpatching (#253) - perf: replace LINQ char filter with
ReplaceLineEndingsinFlatOpc.ToPackage(#250) - chore(deps): update TUnit 1.41.0 → 1.43.11 (#254)
[3.4.2] - April 30, 2026
- fix(pptx): make all part copies resilient to corrupt ZIP local file headers (#234)
- refactor: replace ContainsKey+indexer double-lookups with TryGetValue (#246)
- refactor(excel): remove dead code from SpreadsheetDocumentManager + add WorksheetAccessor unit tests (#247)
- refactor: modernize UriFixer — convenience overload, leaveOpen param, eliminate test duplication (#237)
- refactor: modernise random/guid usage, fix discarded Guid bug, and remove dead code (#244)
- test(excel): add SmlDataRetriever unit tests (SDR001–SDR025) (#236)
- chore(deps): update TUnit 1.37.10 → 1.40.10 (#235, #242, #243, #245)
[3.4.1] - April 23, 2026
- fix: resolve
ArgumentExceptionfor slides withcustData+CustomXmlProperties(#232) - refactor: replace generic
Exceptionwith specific exception types (#228) - perf: eliminate redundant allocations in
MakeValidXmlandAddIfMissing(#229) - ci: add NuGet publish workflow triggered by version tags (#227)
- test: add unit tests for
Base64.ChunkBase64andConvertFromBase64(#230) - chore(deps): update TUnit 1.37.0 → 1.37.10 (#222)
[3.4.0] - April 19, 2026
- feat: add
Optional="true"support to<Table>directive in DocumentAssembler (#150) - feat: add
FitWithinimage sizing mode to DocumentAssembler (#168) - feat: add
RelationshipValidatorto detect danglingr:idreferences in OpenXml parts (#160) - feat: extract shared
RomanNumeralUtilwithToUpperRoman/ToLowerRomanhelpers (#164) - feat(html): render floating tables (
w:tblpPr) with CSS float inWmlToHtmlConverter(#180) - fix(word): correct Russian list item text for values ≥ 100 (#187)
- fix(word): guard
cardinalText/ordinalTextagainst out-of-rangelevelNumberin multiple locales (#200, #201, #208) - fix(html): render DOCX text boxes as inline-block divs in
WmlToHtmlConverter(#166) - perf(pptx): single-pass dispatch in
CopyRelatedPartsForContentParts+ lazySaveAndCleanup(#175) - perf(pptx): avoid
OuterXml→Parseroundtrip inSlidePartData.GetShapeDescriptor(#178) - perf: convert
Regexinstances to source-generated[GeneratedRegex]in several modules (#196) - perf(comparer): reduce heap allocations in
WmlComparerUtilSHA-1 hashing (#199) - perf: modernize SHA1/SHA256 hashing — use
SHA1.HashData(),SHA256.HashData(),Convert.ToHexString()(#184) - perf: eliminate per-character heap allocations in base64 chunking (FlatOpc / Base64) (#209)
- refactor: remove custom relationship ID generator — delegate to OpenXML SDK APIs (#161)
- refactor: simplify LINQ patterns across Excel, Word, and Html modules (#207)
- docs: improve README with NuGet badges, project overview, quick-start, and docs link (#183)
- docs: switch DocFX documentation site to modern Bootstrap-based theme (#211)
- test(word): add unit tests for
ListItemTextGetter_Default, fr_FR, sv_SE, zh_CN, tr_TR, ru_RU locales (#198, #206) - test(word): add MS004–MS009 for
MarkupSimplifiersettings coverage (#213) - test(excel): add
ParseFormulaandXlsxTablescell-address utility tests (#169, #185) - test(common): add
TextReplacerunit tests (#167)
[3.3.1] - March 24, 2026
- fix: handle dangling r:id on p:oleObj/p:externalData — KeyNotFoundException in slide publishing (#156)
- fix: resolve Content directives in v:textpath/
@stringfor VML watermarks (#141)
[3.3.0] - March 22, 2026
- fix: prevent malformed XLSX when worksheet has no data rows (#108)
- fix: use min-width for tab-preceding span to prevent text overflow (#110)
- fix: update docProps/app.xml metadata in PublishSlides output (#114)
- fix: update numFmts count attribute when adding custom number formats (#124)
- fix: custom numFmt IDs must start at 164 per ECMA-376 (#131)
- fix: TextReplacer.CloneWithAnnotation now returns the clone, not the original (#135)
- perf:
O(1)dictionary lookup for media deduplication cache in FluentPresentationBuilder (#128) - perf: cache next slide ID in FluentPresentationBuilder to avoid
O(n²)scan (#140) - perf: cache compiled Regex, use
Any()overCount() == 0, useElement()overElements().First()(#143) - refactor: modernise assembler helper classes (#118)
- refactor: modernize DocumentAssembler.cs with collection expressions and catch cleanup (#138)
- hk: DocumentFormat.OpenXml 3.5.1, TUnit 1.20.0 (#146)
- hk: Modernize CI workflow and update dependencies (#121)
[3.2.0] - January 25, 2026
- hk: DocumentFormat.OpenXml 3.4.1
[3.1.0] - August 30, 2025
- Build with .NET 10.0 and provide .NET 8 & 10 binaries (#106)
[3.0.2] - August 30, 2025
- Extends
DocumentAssemblerto also apply HTML formatting on content in table cells (#101)
[3.0.1] - July 30, 2025
- fix: incorrect insertion of sldLayoutIdLst element for SlideMaster (#100)
[3.0.0] - June 30, 2025
- Public exposure of
IFluentPresentationBuilderergonomic API for the code behindPresentationBuilder
[2.5.2] - June 28, 2025
- fix: relationship of theme parts (#99)
[2.5.1] - March 30, 2025
- Issue 95 and other issues #96 by @MalcolmJohnston
- hk: DocumentFormat.OpenXml 3.3.0
[2.5.0] - February 7, 2025
- Insert Documents or Document Templates using Document Assembler #93 by @MalcolmJohnston
[2.4.2] - January 15, 2025
- fix: Font Sizing Font Styling and Font Coloring is not working #94
- hk: dependencies update
[2.4.1] - January 4, 2025
- fix: Bug fix/document assembler paragraph properties not copied from template #91
- fix: slide naming issues during publishing presentation with *.potx extension
- hk: Migration to xUnit.v3
[2.4.0] - December 8, 2024
- feat: Added support for HTML fragments in Document Assembler Content tag (#86)
[2.3.0] - November 23, 2024
- hk: build with .NET 9.0
- hk: DocumentFormat.OpenXml 3.2.0
- hk: Pack with
dotnet packinstead ofpaket - feat: handle invalid xml characters (#89)
[2.2.2] - November 1, 2024
- feat: DocumentFormat.OpenXml 3.1.0 -> 3.1.1
- docs: Fix document assembler images and other tidy up (#84)
- hk: Document Assembler - Small Code Reorganisation (#83)
[2.2.1] - October 8, 2024
- fix: optimized memory usage during slide publishing
[2.2.0] - September 8, 2024
- DocumentFormat.OpenXml 3.0.2 -> 3.1.0
- DocumentFormat.OpenXml.Framework 3.0.2 -> 3.1.0
- SixLabors.ImageSharp 3.1.4 -> 3.1.5
- SixLabors.ImageSharp.Drawing 2.1.3 -> 2.1.4
[2.1.1] - April 18, 2024
- fix: regression cased by migration to struct inside OpenXML v3 #75
- Dependencies updated
[2.1.0] - Mar 18, 2024
- Migration to .NET 8.0
[2.0.1] - Jan 16, 2024
- Fix regression cased by migration to struct inside OpenXML v3
- DocumentFormat.OpenXml 3.0 -> 3.0.1
- SixLabors.Fonts 2.0 -> 2.0.1
- SixLabors.ImageSharp 3.0.2 -> 3.1.2
- SixLabors.ImageSharp.Drawing 2.0.1 -> 2.1.0
[2.0.0] - Nov 26, 2023
- Migration to .NET 6.0
- DocumentFormat.OpenXml 3.0.0-beta0003
System.Drawing.Commonreplaced by SixLabors.ImageSharp.Drawing`- Removed
libgdiplusdependency - Drop old
WmlComparer
[1.13.5] - Mar 27, 2023
- perf: improved PublishSlides perf #61
[1.13.4] - Dec 6, 2022
- fix: issues with 7.0 packages
[1.13.3] - Dec 5, 2022
- fix: PublishSlides: missing ppt/metadata for google presentations #59
- Dependencies updated
[1.13.2] - Oct 4, 2022
- remove caracters to prevent > at document assembler #57
- Handle W.lastRenderedPageBreak in UnicodeMapper #58
[1.13.1] - Sept 27, 2022
longoverload forCell.Number
[1.13.0] - Sept 27, 2022
- DocumentFormat.OpenXml (2.18)
- Added Cell.Bool for Excel helpers
[1.12.2] - Jul 13, 2022
- fix: PtOpenXmlUtil: process corrupted OpenXmlPart items #56
[1.12.1] - Jul 11, 2022
- DocumentFormat.OpenXml (2.17.1)
[1.12.0] - Jun 2, 2022
- Static Cell builder class for simpler and safer Excel generation
- Auto new modified date for decks composed with PresentationBuilder
[1.11.0] - May 29, 2022
- PublishSlides: reduced memory consumption #53
[1.10.2] - Mar 16, 2022
- DocumentFormat.OpenXml (2.16.0)
- Lock
System.Drawing.Commonversion tov5
[1.10.0] - Feb 19, 2022
- Added support of ExtendedChartPart (http://schemas.microsoft.com/office/drawing/2014/chartex) in PresentationBuilder and DocumentBuilder.
[1.9.2] - Feb 17, 2022
- Fix: Don't show hidden slides after PresentationBuilder.BuildPresentation
[1.9.1] - Feb 9, 2022
- Fixed incorrect usage of Stream API
[1.9.0] - Jan 28, 2022
- DocumentFormat.OpenXml (2.15.0)
[1.8.2] - Dec 16, 2021
- Improved memory consumption for PresentationBuilder.PublishSlides #44 by @f1nzer
- Revert DocumentFormat.OpenXml back to 2.13.1 (because of this issue)
[1.8.1] - Nov 5, 2021
- DocumentFormat.OpenXml (2.14.0)
[1.8.0] - Oct 25, 2021
- DocumentAssembler: Support for multi-value XPath results #39
[1.7.3] - Oct 7, 2021
- Fixed copy Chart Style Parts in FluentPresentationBuilder
[1.7.2] - Aug 23, 2021
- DocumentFormat.OpenXml v2.13.1
[1.7.1] - Aug 18, 2021
- Resolving bug with nested rowspans #35
[1.7.0] - Aug 15, 2021
- DocumentAssembler: Support for images #31
[1.6.1] - Jul 11, 2021
[1.6.0] - Jul 3, 2021
- Add WorkbookDfn.WriteTo(Stream) method #29
- Fixed generation of multiple Excel tables
- Fixed formatting of cells with DateTime
[1.5.0] - Jun 26, 2021
- Structural comparison for Theme, Master, Layout #20
- Auto-scaling for slides from presentations with different slide size
- DocumentFormat.OpenXml (2.13)
- System.Drawing.Common (5.0.2)
[1.4.0] - Feb 10, 2021
- DocumentBuilder: Added ISource and TableCellSource - #17
- DocumentFormat.OpenXml (2.12.1)
- Added dependency on System.IO.Packaging
- Fixed DateTime/DateTimeOffset serialisation format to Excel
[1.3.1] - July 30, 2020
- PresentationBuilder: Fixed CopyExtendedPart
[1.3.0] - July 29, 2020
- DocumentFormat.OpenXml (2.11.3)
- PresentationBuilder: Bug Fixes #16
[1.2.1] - May 2, 2020
- HTML to WML: Allow font-size with unit rem #13
[1.2.0] - March 12, 2020
- DocumentFormat.OpenXml (2.10.1)
[1.1.4] - December 6, 2019
- Slide title extracted and saved to document title #10
- Ensured that Modified date is propagated
- Compiled and tested on .NET Core 3.1 #9
[1.1.3] - December 3, 2019
- Don't rename theme when we extract slides from auto-generated 1-layout master
[1.1.2] - December 2, 2019
- Bug fixes
[1.1.1] - December 1, 2019
- Extract and merge presentation without slides (only masters) #5
[1.1.0] - November 29, 2019
- Added Slide Publishing API #2
[1.0.0] - November 21, 2019
- Initial release: latest version of OpenXmlPowerTools