Releases: dotnet/Open-XML-SDK
Releases · dotnet/Open-XML-SDK
[3.4.0]
Added
- Added
MediaDataPartType.Mp4to support MP4 video media parts in presentations and documents (#1866) - Updated bundled Open XML schemas to the Q3 2025 Office release, enabling newer document and presentation features (#1963)
Changed
- Reduced JIT and AOT size and improved document load performance by removing the generic builder pattern from element metadata creation (#1842, #1843)
- Optimized
FromChunkedBase64Stringto significantly reduce allocations and improve throughput when decoding chunked base64 content (≈2.4× faster, ≈70% less memory) (#1868)
Fixed
- Switched to
XmlDOMTextWriterinstead ofXmlWriter.Createto correctly handle serialization of certain XML content (#1869, #1961) - Added a clear error when attempting to open encrypted documents that the SDK cannot process (#1635, #1969)
- Improved exception messages when required package parts are missing by including the name of the missing part (#1971, #1974)
Documentation
- Clarified the README SDK description and simplified the note on 3.0.0 breaking changes (#1858)
- Documented that disposing a package with
AutoSaveset tofalsedoes not persist changes (#1873) - Removed the PowerPoint modern comments sample, which now lives on learn.microsoft.com (#1861)
Thanks to the following for their contributions:
[3.3.0]
Added
- Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.WorkbookCompatibilityVersionnamespace
Fixed
- Performance of
.ToFlatOpc(...)has been greatly improved for large parts (#1863)
Thanks to the following for their contributions:
[3.2.0]
Added
- Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichDatanamespace - Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArraysnamespace
Changed
- Updated Nuget badge on README
Fixed
- Fixed issue where a disposed object (DeflateStream) cannot be accessed after recovering from malformed url (#1802)
- Fixed issue with relationships not being created when cloning Flat OPC (#1814)
- Fixed issue with corrupt files remaining locked after attempting to open with
WordprocessingDocument.Open(#1681) - Fixed issue with changes not applied after
.Save()(#1771) - Fixed
AddWorkbookPartthrows exception if no main part is available (#1745) - Fixed issue with base classes not included with LINQ generation (#1838)
Thanks to the following for their contributions:
[3.1.1]
[3.1.0]
Added
- Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefreshnamespace - Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArraysnamespace - Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioningnamespace - Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeServicenamespace - Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsFormsnamespace - Added
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculationnamespace
Fixed
[3.0.2]
[3.0.1]
Fixed
- Fixed issue where document type would not be correct unless content type was checked first (#1625)
- Added check to only seek on packages where it is supported (#1644)
- If a malformed URI is encountered, the exception is now the same as v2.x (
OpenXmlPackageExceptionwith an innerUriFormatException) (#1644)
[3.0.0]
Added
- Packages can now be saved on .NET Core and .NET 5+ if constructed with a path or stream (#1307).
- Packages can now support malformed URIs (such as relationships with a URI such as
mailto:person@) - Introduce equality comparers for
OpenXmlElement(#1476) IFeatureCollectioncan now be enumerated and has a helpful debug view to see what features are registered (#1452)- Add mime types to part creation (#1488)
DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.MainnamespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.MainnamespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021namespace
Changed
- When validation finds incorrect part, it will now include the relationship type rather than a class name
IDisposableFeatureis now a part of the framework package and is available by default on a package or part.
Breaking Changes
- .NET Standard 1.3 is no longer a supported platform. .NET Standard 2.0 is the lowest .NET Standard supported.
- Core infrastructure is now contained in a new package DocumentFormat.OpenXml.Framework. Typed classes are still in DocumentFormat.OpenXml. This means that you may reference DocumentFormat.OpenXml and still compile the same types, but if you want a smaller package, you may rely on just the framework package.
- Changed type of
OpenXmlPackage.PackagetoDocumentFormat.OpenXml.Packaging.IPackageinstead ofSystem.IO.Packaging.Packagewith a similar API surface EnumValue<T>now is used to box a struct rather than aSystem.Enum. This allows us to enable behavior on it without resorting to reflection- Methods on parts to add child parts (i.e.
AddImagePart) are now implemented as extension methods off of a new marker interfaceISupportedRelationship<T> - Part type info enums (i.e.
ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the newPartTypeInfostruct that will contain the necessary information. OpenXmlPackage.CanSaveis now an instance property (#1307)- Removed
OpenXmlSettings.RelationshipErrorHandlerFactoryand associated types and replaced with a built-in mechanism to enable this IdPartPairis now a readonly struct rather than a class- Renamed
PartExtensionProvidertoIPartExtensionFeatureand reduced its surface area to only two methods (instead of a fullDictionary<,>). The property to access this off ofOpenXmlPackagehas been removed, but may be accessed viaFeatures.Get<IPartExtensionFeature>()if needed. OpenXmlPart/OpenXmlContainer/OpenXmlPackageand derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementListis now a struct that implementsIEnumerable<OpenXmlElement>andIReadOnlyList<OpenXmlElement>where available (#1429)- Individual implementations of
OpenXmlPartReaderare available now for each package type (i.e.WordprocessingDocumentPartReader,SpreadsheetDocumentPartReader,PresentationDocumentPartReader), and the previousTypedOpenXmlPartReaderhas been removed. (#1403) - Reduced unnecessary target frameworks for packages besides DocumentFormat.OpenXml.Framework (#1471)
- Changed some spelling issues for property names (#1463, #1444)
Model3Dnow represents the modified xml element tag nameam3d.model3d(Previouslyam3d.model3D)- Removed
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfo - Removed
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuid - Removed unused
SchemaAttrAttribute(#1316) - Removed unused
ChildElementInfoAttribute(#1316) - Removed
OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316) - Removed obsolete validation logic from v1 of the SDK (#1316)
- Removed obsoleted methods from 2.x (#1316)
- Removed mutable properties on OpenXmlAttribute and marked as
readonly(#1282) - Removed
OpenXmlPackage.Closein favor ofDispose(#1373) - Removed
OpenXmlPackage.SaveAsin favor ofClone(#1376)
[3.0.0-beta3]
[v3.0.0-beta2]
Breaking Changes
OpenXmlElementListis now a struct that implementsIEnumerable<OpenXmlElement>andIReadOnlyList<OpenXmlElement>(where available)- Individual implementations of
OpenXmlPartReaderare available now for each package type (i.e.WordprocessingDocumentPartReader,SpreadsheetDocumentPartReader,PresentationDocumentPartReader), and the previousTypedOpenXmlPartReaderhas been removed.