DocumentFormat.OpenXml 3.1.1

dotnet add package DocumentFormat.OpenXml --version 3.1.1                
NuGet\Install-Package DocumentFormat.OpenXml -Version 3.1.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DocumentFormat.OpenXml" Version="3.1.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DocumentFormat.OpenXml --version 3.1.1                
#r "nuget: DocumentFormat.OpenXml, 3.1.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DocumentFormat.OpenXml as a Cake Addin
#addin nuget:?package=DocumentFormat.OpenXml&version=3.1.1

// Install DocumentFormat.OpenXml as a Cake Tool
#tool nuget:?package=DocumentFormat.OpenXml&version=3.1.1                

Open XML SDK

[!NOTE]

v3.0.0 refactors and addresses some technical debt while retaining source compatibility as much as possible. You should be able to update your package and recompile with limited changes. However, binary compatibility was not a goal and will break that for some changes which are documented. PRs that introduced such changes are marked with a breaking-change label and were added to a list to help migrating to v3.0.0.

Please see the v3.0.0 milestone for issues and PRs that are included. For discussions, please join us at this issue.

[!IMPORTANT] The CI feed URL has changed as of 2 April, 2024. Please update to the new URL if using CI builds.

Downloads Build Status Backend Status

The Open XML SDK provides tools for working with Office Word, Excel, and PowerPoint documents. It supports scenarios such as:

  • High-performance generation of word-processing documents, spreadsheets, and presentations.
  • Document modification, such as adding, updating, and removing content and metadata.
  • Search and replace content using regular expressions.
  • Splitting up (shredding) a file into multiple files, and combining multiple files into a single file.
  • Updating cached data and embedded spreadsheets for charts in Word/PowerPoint.

Table of Contents

Packages

The official release NuGet packages for Open XML SDK are on NuGet.org:

Package Download Prerelease
DocumentFormat.OpenXml.Framework NuGet NuGet
DocumentFormat.OpenXml NuGet NuGet
DocumentFormat.OpenXml.Linq NuGet NuGet
DocumentFormat.OpenXml.Features NuGet NuGet

Daily Builds

The NuGet package for the latest builds of the Open XML SDK is available as a custom feed on an Azure blob. Stable releases here will be mirrored onto NuGet and will be identical. You must set up a NuGet.config file that looks similar to this:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="OpenXmlCI" value="https://ooxml.blob.core.windows.net/feed/index.json" />
  </packageSources>
</configuration>

For latests changes, please see the changelog

Framework Support

The package currently supports the following targets:

  • .NET Framework 3.5, 4.0, 4.6
  • .NET Standard 2.0
  • .NET 6.0

For details on platform support, including other runtimes such as Mono and Unity, please see the docs at https://docs.microsoft.com/en-us/dotnet/standard/net-standard.

Known Issues

  • On .NET Core and .NET 5 and following, ZIP packages do not have a way to stream data. Thus, the working set can explode in certain situations. This is a known issue.
  • On .NET Framework, an IsolatedStorageException may be thrown under certain circumstances. This generally occurs when manipulating a large document in an environment with an AppDomain that does not have enough evidence. A sample with a workaround is available here.

Documentation

Please see Open XML SDK for the official documentation.

If you have how-to questions

  • Open XML SDK 2.5 Productivity Tool: The Productivity Tool provides viewing and code generation compatible with the Open XML SDK 2.5.
  • Open XML Powertools: This provides example code and guidance for implementing a wide range of Open XML scenarios.
  • ClosedXml: This library provides a simplified object model on top of the OpenXml SDK for manipulating and creating Excel documents.
  • OfficeIMO: This library provides a simplified object model on top of the OpenXml SDK manipulating and creating Word documents.
  • OpenXML-Office: This nuget library provides a simplified object model on top of the OpenXml SDK manipulating and creating PPT and Excel documents.
  • Serialize.OpenXml.CodeGen: This is a tool that converts an OpenXml document into the .NET code required to create it.
  • Html2OpenXml: This is a tool that takes HTML and converts it to an OpenXml document.
  • DocxToSource: This is a tool designed to be a replacement for the old OpenXML SDK Productivity Tool.
  • OOXML Viewer: This is an extension for Visual Studio Code to View and Edit the xml parts of an Office Open XML file and to view a diff with the previous version of an OOXML part when saved from an outside program. Search "OOXML" in the VS Code extensions tab or download it from the VS Code Marketplace
  • ShapeCrawler: This library provides a simplified object model on top of the OpenXml SDK to manipulate PowerPoint documents.
  • OOXML Validator: VS Code extension to validate Office Open XML files. Search "OOXML" in the VS Code extensions tab or download it from the VS Code Marketplace

How can I contribute?

We welcome contributions! Many people all over the world have helped make this project better.

  • Contributing explains what kinds of contributions we welcome

Reporting security issues and security bugs

Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) secure@microsoft.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the Security TechCenter.

.NET Foundation

The Open XML SDK is a .NET Foundation project.

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. For more information, see the .NET Foundation Code of Conduct.

License

The Open XML SDK is licensed under the MIT license.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net35 is compatible.  net40 is compatible.  net403 was computed.  net45 was computed.  net451 was computed.  net452 was computed.  net46 is compatible.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (778)

Showing the top 5 NuGet packages that depend on DocumentFormat.OpenXml:

Package Downloads
ClosedXML

See release notes https://github.com/ClosedXML/ClosedXML/releases/tag/0.104.2 ClosedXML is a .NET library for reading, manipulating and writing Excel 2007+ (.xlsx, .xlsm) files. It aims to provide an intuitive and user-friendly interface to dealing with the underlying OpenXML API.

Omnia.Fx.NetCore

Package Description

Microting.eForm

Package Description

OpenXmlPowerTools

The Open XML PowerTools provides guidance and example code for programming with Open XML Documents (DOCX, XLSX, and PPTX). It is based on, and extends the functionality of the Open XML SDK. It supports scenarios such as: •Splitting DOCX/PPTX files into multiple files. •Combining multiple DOCX/PPTX files into a single file. •Populating content in template DOCX files with data from XML. •High-fidelity conversion of DOCX to HTML. •Searching and replacing content in DOCX/PPTX using regular expressions. •Managing tracked-revisions, including detecting tracked revisions, and accepting tracked revisions. •Updating Charts in DOCX/PPTX files, including updating cached data, as well as the embedded XLSX. •Retrieving metrics from DOCX files, including the hierarchy of styles used, the languages used, and the fonts used. •Writing XLSX files using far simpler code than directly writing the markup, including a streaming approach that enables writing XLSX files with millions of rows.

SpreadsheetLight

SpreadsheetLight is an open source Open XML spreadsheet .NET library written in C#, and is released under the MIT License. You can create new Open XML spreadsheets, or work with existing Open XML spreadsheets that are compatible with Microsoft Excel 2007/2010/2013 and LibreOffice Calc. No Office/Excel Interop needed. You do not need Microsoft Office/Excel to be installed.

GitHub repositories (63)

Showing the top 5 popular GitHub repositories that depend on DocumentFormat.OpenXml:

Repository Stars
microsoft/semantic-kernel
Integrate cutting-edge LLM technology quickly and easily into your apps
OrchardCMS/OrchardCore
Orchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.
ClosedXML/ClosedXML
ClosedXML is a .NET library for reading, manipulating and writing Excel 2007+ (.xlsx, .xlsm) files. It aims to provide an intuitive and user-friendly interface to dealing with the underlying OpenXML API.
radzenhq/radzen-blazor
Radzen Blazor is a set of 90+ free native Blazor UI components packed with DataGrid, Scheduler, Charts and robust theming including Material design and FluentUI.
mini-software/MiniExcel
Fast, Low-Memory, Easy Excel .NET helper to import/export/template spreadsheet (support Linux, Mac)
Version Downloads Last updated
3.1.1 272,124 10/16/2024
3.1.0 1,285,086 7/30/2024
3.0.2 3,005,773 3/14/2024
3.0.1 2,394,406 1/9/2024
3.0.0 1,180,079 11/15/2023
3.0.0-beta0003 22,953 9/5/2023
3.0.0-beta0002 19,975 6/14/2023
2.20.0 10,828,921 4/6/2023
2.19.0 5,113,639 12/14/2022
2.18.0 5,769,909 9/7/2022
2.17.1 3,341,927 6/30/2022
2.16.0 34,114,946 3/15/2022
2.15.0 5,432,574 12/17/2021
2.14.0 2,231,966 10/28/2021
2.14.0-beta0001 21,572 9/20/2021
2.13.1 3,320,623 8/18/2021
2.13.0 4,223,260 5/13/2021
2.13.0-beta0002 6,844 4/20/2021
2.13.0-beta0001 14,938 3/10/2021
2.12.3 3,332,205 2/24/2021
2.12.2 372,794 2/17/2021
2.12.1 2,068,828 1/11/2021
2.12.0 2,273,506 12/15/2020
2.11.3 7,962,470 7/17/2020
2.11.2 321,049 7/10/2020
2.11.1 8,267 7/10/2020
2.11.0 2,226,379 5/21/2020
2.11.0-beta0001 48,163 3/25/2020
2.10.1 4,938,660 2/28/2020
2.10.0 2,063,930 1/10/2020
2.10.0-beta0002 282,241 7/11/2019
2.10.0-beta0001 68,392 6/10/2019
2.9.1 10,233,892 3/13/2019
2.9.0 1,178,242 1/25/2019
2.8.1 8,725,354 1/6/2018
2.8.0 162,038 12/30/2017
2.7.2 49,045,448 6/7/2017
2.7.1 549,809 5/1/2017
2.5.0 13,379,240 8/4/2013
1.0.0 1,958,054 6/18/2011

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [3.1.1] - 2024-10-15

### Fixed

- Updated System.IO.Packaging and other dependencies (#1794, #1795, #1796, #1782, #1808)
- Fixed add c16:uniqueId to several chart complex types (#1762)
- Fixed <remarks> rather than <remark> in the documentation comments (#1775)

## [3.1.0] - 2024-07-30

### Added
- Added `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh` namespace
- Added `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays` namespace
- Added `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning` namespace
- Added `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService` namespace
- Added `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms` namespace
- Added `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation` namespace

### Fixed

- Fixed issue where `OpenXmlUnknownElement` is returned instead of `CommentPropertiesExtension` (#1751)
- Fixed issue where `OpenXmlWriter` is unable to write `SharedStringTablePart` (#1755)

## [3.0.2] - 2024-03-14

### Fixed

- Fixed issue where temp files were shareable and not deleted on close (#1658)

## [3.0.1] - 2024-01-09

### 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 (`OpenXmlPackageException` with an inner `UriFormatException`) (#1644)

## [3.0.0] - 2023-11-15

### 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)
- `IFeatureCollection` can 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.Main` namespace
- `DocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main` namespace
- `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021` namespace

### Changed

- When validation finds incorrect part, it will now include the relationship type rather than a class name
- `IDisposableFeature` is 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.Package` to `DocumentFormat.OpenXml.Packaging.IPackage` instead of `System.IO.Packaging.Package` with a similar API surface
- `EnumValue<T>` now is used to box a struct rather than a `System.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 interface `ISupportedRelationship<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 new `PartTypeInfo` struct that will contain the necessary information.
- `OpenXmlPackage.CanSave` is now an instance property (#1307)
- Removed `OpenXmlSettings.RelationshipErrorHandlerFactory` and associated types and replaced with a built-in mechanism to enable this
- `IdPartPair` is now a readonly struct rather than a class
- Renamed `PartExtensionProvider` to `IPartExtensionFeature` and reduced its surface area to only two methods (instead of a full `Dictionary<,>`). The property to access this off of `OpenXmlPackage` has been removed, but may be accessed via `Features.Get<IPartExtensionFeature>()` if needed.
- `OpenXmlPart`/`OpenXmlContainer`/`OpenXmlPackage` and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)
- `OpenXmlElementList` is now a struct that implements `IEnumerable<OpenXmlElement>` and `IReadOnlyList<OpenXmlElement>` where available (#1429)
- Individual implementations of `OpenXmlPartReader` are available now for each package type (i.e. `WordprocessingDocumentPartReader`, `SpreadsheetDocumentPartReader`, `PresentationDocumentPartReader`), and the previous `TypedOpenXmlPartReader` has been removed. (#1403)
- Reduced unnecessary target frameworks for packages besides DocumentFormat.OpenXml.Framework (#1471)
- Changed some spelling issues for property names (#1463, #1444)
- `Model3D` now represents the modified xml element tag name `am3d.model3d` (Previously `am3d.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.Close` in favor of `Dispose` (#1373)
- Removed `OpenXmlPackage.SaveAs` in favor of `Clone` (#1376)

## [2.20.0]

### Added

- Added DocumentFormat.OpenXml.Office.Drawing.Y2022.ImageFormula namespace
- Added DocumentFormat.OpenXml.Office.Word.Y2023.WordML.Word16DU namespace

### Changed

- Marked `OpenXmlSimpleType.TextValue` as obsolete. This property was never meant to be used externally (#1284)
- Marked `OpenXmlPackage.Package` as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)
- Marked `OpenXmlPackage.Close` as obsolete. This will be removed in a later release, use Dispose instead (#1371)
- Marked `OpenXmlPackage.SaveAs` as obsolete as it will be removed in a future version (#1378)

### Fixed

- Fixed incorrect file extensions for vbaProject files (#1292)
- Fixed incorrect file extensions for ImagePart (#1305)
- Fixed incorrect casing for customXml (#1351)
- Fixed AddEmbeddedPackagePart to allow correct extensions for various content types (#1388)

## [2.19.0] - 2022-12-14

### Added

- .NET 6 target with support for trimming (#1243, #1240)
- Added DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData namespace
- Added DocumentFormat.OpenXml.Office.PowerPoint.Y2019.Main.Command namespace
- Added DocumentFormat.OpenXml.Office.PowerPoint.Y2022.Main.Command namespace
- Added Child RichDataPivotCacheGuid to DocumentFormat.OpenXml.Office2010.Excel.PivotCacheDefinition

### Fixed

- Removed reflection usage where possible (#1240)
- Fixed issue where some URIs might be changed when cloning or creating copy (#1234)
- Fixed issue in FlatOpc generation that would not read the full stream on .NET 6+ (#1232)
- Fixed issue where restored relationships wouldn't load correctly (#1207)

## [2.18.0] 2022-09-06

### Added

- Added DocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespace (#1196)
- Added durableId attribute to DocumentFormat.OpenXml.Wordprocessing.NumberingPictureBullet (#1196)
- Added few base classes for typed elements, parts, and packages (#1185)

### Changed

- Adjusted LICENSE.md to conform to .NET Foundation requirements (#1194)
- Miscellaneous changes for better perf for internal services

## [2.17.1] - 2022-06-28

### Removed

- Removed the preview namespace DocumentFormat.OpenXml.Office.Comments.Y2020.Reactions because this namespace will currently create invalid documents.

### Fixed

- Restored the PowerPointCommentPart relationship to PresentationPart.

### Deprecated

- The relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.

## [2.17.0] - Unreleased

### Added

- Added DocumentFormat.OpenXml.Office.Comments.Y2020.Reactions namespace (#1151)
- Added DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotVersionInfo namespace (#1151)

### Fixed

- Moved PowerPointCommentPart relationship to SlidePart (#1137)

### Updated

- Removed public API analyzers in favor of EnablePackageValidation (#1154)

## [2.16.0] - 2022-03-14

### Added

- Added method `OpenXmlPart.UnloadRootElement` that will unload the root element if it is loaded (#1126)

### Updated

- Schema code generation was moved to the SDK project using C# code generators

Thanks to the following for their contribution:

@f1nzer

## [2.15.0] - 2021-12-16

### Added

- Added samples for strongly typed classes and Linq-to-XML in the `./samples` directory (#1101, #1087)
- Shipping additional libraries for some additional functionality in `DocumentFormat.OpenXml.Features` and `DocumentFormat.OpenXml.Linq`. See documentation in repo for additional details.
- Added extension method to support getting image part type (#1082)
- Added generated classes and `FileFormatVersions.Microsoft365` for new subscription model types and constraints (#1097).

### Fixed

- Fixed issue for changed mime type `model/gltf.binary` (#1069)
- DocumentFormat.OpenXml.Office.Drawing.ShapeTree is now available only in Office 2010 and above, not 2007.
- Correctly serialize `new CellValue(bool)` values (#1070)
- Updated known namespaces to be generated via an in-repo source generator (#1092)
- Some documentation issues around `FileFormatVersions` enum

Thanks to the following for their contributions:

@ThomasBarnekow
@stevenhansen
@JaimeStill
@jnyrup

## [2.14.0] - 2021-10-28

### Added

- Added generated classes for Office 2021 types and constraints (#1030)
- Added `Features` property to `OpenXmlPartContainer` and `OpenXmlElement` to enable a per-part or per-document state storage
- Added public constructors for `XmlPath` (#1013)
- Added parts for Rich Data types (#1002)
- Added methods to generate unique paragraph ids (#1000)

Thanks to the following for their contributions:

@rmboggs
@ThomasBarnekow

## [2.13.1] - 2021-08-17

### Fixed

- Fixed some nullability annotations that were incorrectly defined (#953, #955)
- Fixed issue that would dispose a `TextReader` when creating an `XmlReader` under certain circumstances (#940)
- Fixed a documentation type (#937)
- Fixed an issue with adding additional children to data parts (#934)
- Replaced some documentation entries that were generic values with helpful comments (#992)
- Fixed a regression in AddDataPartRelationship (#954)

Thanks to the following for their contributions:

@ThomasBarnekow
@sorensenmatias
@lklein53
@lindexi

## [2.13.0] - 2021-05-13

### Added

- Additional O19 types to match Open Specifications (#916)
- Added generated classes for Office 2019 types and constraints (#882)
- Added nullability attributes (#840, #849)
- Added overload for `OpenXmlPartReader` and `OpenXmlReader.Create(...)` to ignore whitespace (#857)
- Added `HexBinaryValue.TryGetBytes(...)` and `HexBinaryValue.Create(byte[])` to manage the encoding and decoding of bytes (#867)
- Implemented `IEquatable<IdPartPair>` on `IdPartPair` to fix equality implementation there and obsoleted setters (#871)

### Fixed

- Fixed serialization of `CellValue` constructors to use invariant cultures (#903)
- Fixed parsing to allow exponents for numeric cell values (#901)
- Fixed massive performance bottleneck when `UniqueAttributeValueConstraint` is involved (#924)

### Deprecated

- Deprecated Office2013.Word.Person.Contact property. It no longer persists and will be removed in a future version (#912)

Thanks to the following for their contributions:

@lklein53  
@igitur

## [2.12.3] - 2021-02-24

### Fixed

- Fixed issue where `CellValue` may validate incorrectly for boolean values (#890)

## [2.12.2] - 2021-02-16

### Fixed

- Fixed issue where `OpenSettings.RelationshipErrorHandlerFactory` creates invalid XML if the resulting URI is smaller than the input (#883)

## [2.12.1] - 2021-01-11

### Fixed

- Fixed bug where properties on `OpenXmlCompositeElement` instances could not be set to null to remove element (#850)
- Fixed `OpenXmlElement.RawOuterXml` to properly set null values without throwing (#818)
- Allow rewriting of all malformed URIs regardless of target value (#835)

## [2.12.0] - 2020-12-09

### Added

- Added `OpenSettings.RelationshipErrorHandlerFactory` to provide a way to handle URIs that break parsing documents with malformed links (#793)
- Added `OpenXmlCompositeElement.AddChild(OpenXmlElement)` to add children in the correct order per schema (#774)
- Added `SmartTagClean` and `SmartTagId` in place of `SmtClean` and `SmtId` (#747)
- Added `OpenXmlValidator.Validate(..., CancellationToken)` overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)
- Added overloads for `CellValue` to take `decimal`, `double`, and `int`, as well as convenience methods to parse them (#782)
- Added validation for `CellType` for numbers and date formats (#782)
- Added `OpenXmlReader.GetLineInfo()` to retrieve `IXmlLineInfo` of the underlying reader if available (#804)

### Fixed

- Fixed exception that would be thrown if attempting to save a document as FlatOPC if it contains SVG files (#822)
- Added `SchemaAttrAttribute` attributes back for backwards compatibility (#825)

### Removed

- Removed explicit reference to `System.IO.Packaging` on .NET 4.6 builds (#774)

## [2.11.3] - 2020-07-17

### Fixed

- Fixed massive performance bottleneck when `IndexReferenceConstraint` and `ReferenceExistConstraint` are involved (#763)
- Fixed `CellValue` to only include three most signficant digits on second fractions to correct issue loading dates (#741)
- Fixed a couple of validation indexing errors that might cause erroneous validation errors (#767)
- Updated internal validation system to not use recursion, allowing for better short-circuiting (#766)

## [2.11.2] - 2020-07-10

### Fixed

- Fixed broken source link (#749)
- Ensured compilation is deterministic (#749)
- Removed extra file in NuGet package (#749)

## [2.11.1] - 2020-07-10

### Fixed

- Ensure .NET Framework builds pass PEVerify (#744)
- `OpenXmlPartContainer.DeletePart` no longer throws an exception if there isn't a match for the identifier given (#740)
- Mark obsolete members to not show up with Intellisense (#745)
- Fixed issue with `AttributeRequiredConditionToValue` semantic constraint where validation could fail on correct input (#746)

## [2.11.0] - 2020-05-21

### Added

- Added `FileFormatVersions.2019` enum (#695)
- Added `ChartSpace` and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).
- Added `OpenXmlElementFunctionalExtensions.With(...)` extension methods, which offer flexible means for constructing `OpenXmlElement` instances in the context of pure functional transformations (#679)
- Added minimum Office versions for enum types and values (#707)
- Added additional `CompatSettingNameValues` values: `UseWord2013TrackBottomHyphenation`, `AllowHyphenationAtTrackBottom`, and `AllowTextAfterFloatingTableBreak` (#706)
- Added gfxdata attribue to Arc, Curve, Line, PolyLine, Group, Image, Oval, Rect, and RoundRect shape complex types per MS-OI29500 2.1.1783-1799 (#709)
- Added `OpenXmlPartContainer.TryGetPartById` to enable child part retrieval without exception if it does not exist (#714)
- Added `OpenXmlPackage.StrictRelationshipFound` property that indicates whether this package contains Transitional relationships converted from Strict (#716)

### Fixed

- Custom derived parts did not inherit known parts from its parent, causing failure when adding parts (#722)

### Changed

- Marked the property setters in `OpenXmlAttribute` as obsolete as structs should not have mutable state (#698)

## [2.10.1] - 2020-02-28

### Fixed

- Ensured attributes are available when `OpenXmlElement` is initialized with outer XML (#684, #692)
- Some documentation errors (#681)
- Removed state that made it non-thread safe to validate elements under certain conditions (#686)
- Correctly inserts strongly-typed elements before known elements that are not strongly-typed (#690)

## [2.10.0] - 2020-01-10

### Added

- Added initial Office 2016 support, including `FileFormatVersion.Office2016`, `ExtendedChartPart` and other new schema elements (#586)
- Added .NET Standard 2.0 target (#587)
- Included symbols support for debugging (#650)
- Exposed `IXmlNamespaceResolver` from `XmlPath` instead of formatted list of strings to expose namespace/prefix mapping (#536)
- Implemented `IComparable<T>` and `IEquatable<T>` on `OpenXmlComparableSimpleValue` to allow comparisons without boxing (#550)
- Added `OpenXmlPackage.RootPart` to easily access the root part on any package (#661)

### Changed

- Updated to v4.7.0 of System.IO.Packaging which brings in a number of perf fixes (#660)
- Consolidated data for element children/properties to reduce duplication (#540, #547, #548)
- Replaced opaque binary data for element children constraints with declarative model (#603)
- A number of performance fixes to minimize allocations where possible
- 20% size reduction from 5.5mb to 4.3mb
- The validation subsystem went through a drastic redesign. This may cause changes in what errors are reported.

### Fixed

- Fixed some documentation inconsistencies (#582)
- Fixed `ToFlatOpcDocument`, `ToFlatOpcString`, `FromFlatOpcDocument`, and `FromFlatOpcString` to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)

## [2.9.1] - 2019-03-13

### Changed

- Added a workaround for a .NET Native compiler issue that doesn't support calling `Marshal.SizeOf<T>` with a struct that contains auto-implemented properties (#569)
- Fixed a documentation error (#528)

## [2.9.0] - 2018-06-08

### Added

- `ListValue` now implements `IEnumerable<T>` (#385)
- Added a `WebExtension.Frozen` and obsoleted misspelled `Fronzen` property (#460)
- Added an `OpenXmlPackage.CanSave` property that indicates whether a platform supports saving without closing the package (#468)
- Simple types (except `EnumValue` and `ListValue`) now implement `IComparable<T>` and `IEquatable<T>` (#487)

### Changed

- Removed state that was carried in validators that would hold onto packages when not in use (#390)
- `EnumSimpleType` parsing was improved and uses less allocations and caches for future use (#408)
- Fixed a number of spelling mistakes in documentation (#462)
- When calling `OpenXmlPackage.Save` on .NET Framework, the package is now flushed to the stream (#468)
- Fixed race condition while performing strict translation of attributes (#480)
- Schema data for validation uses a more compact format leading to a reduction in dll size and performance improvements for loading (#482, #483)
- A number of APIs are marked as obsolete as they have simple workarounds and will be removed in the next major change
- Fixed some constraint values for validation that contained Office 2007, even when it was only supported in later versions
- Updated `System.IO.Packaging` to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET Framework

## [2.8.1] - 2018-01-03

### Changed

- Corrected package license file reference to show updated MIT License

## [2.8.0] - 2017-12-28

### Added

- Default runtime directive for better .NET Native support.

### Changed

- Fixed part saving to be encoded with UTF8 but no byte order mark. This caused some renderers to not be able to open the generated document.
- Fixed exceptions thrown when errors are encountered while opening packages to be consistent across platforms.
- Fixed issue on Mono platforms using System.IO.Packaging NuGet package (Xamarin, etc) when creating a document.
- Fixed manual saving of a package when autosave is false.
- Fixed schema constraint data and standardized serialization across platforms.
- Upgraded to `System.IO.Packaging` version 4.4.0 which fixes some consistency with .NET Framework in opening packages.

## [2.7.2] - 2017-06-06

### Added

- Package now supports .NET 3.5 and .NET 4.0 in addition to .NET Standard 1.3 and .NET Framework 4.6

### Changed

- Fixed issue where assembly version wasn't set in assembly.

## [2.7.1] - 2017-01-31

### Changed

- Fixed crash when validation is invoked on .NET Framework with strong-naming enforced.

## [2.7.0] - 2017-01-24

### Added

- SDK now  supports .NET Standard 1.3

### Changed

- Moved to using System.IO.Packaging from dotnet/corefx for .NET Standard 1.3 and WindowsBase for .NET 4.5.
- Cleaned up project build system to use .NET CLI.

## [2.6.1] - 2016-01-15

### Added

- Added hundreds of XUnit tests. There are now a total of 1333 tests. They take about 20 minutes to run, so be patient.

## [2.6.0] - 2015-06-29

### Added

- Incorporated a replacement `System.IO.Packaging` that fixes some serious (but exceptional) bugs found in the WindowsBase implementation

[3.0.1]: https://github.com/dotnet/Open-XML-SDK/compare/v3.0.0...v3.0.1
[3.0.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.20.0...v3.0.0
[2.20.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.19.0...v2.20.0
[2.19.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.18.0...v2.19.0
[2.18.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.17.1...v2.18.0
[2.17.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.17.0...v2.17.1
[2.17.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.16.0...v2.17.0
[2.16.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.15.0...v2.16.0
[2.15.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.14.0...v2.15.0
[2.14.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.14.0-beta1...v2.14.0
[2.13.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.13.0...v2.13.1
[2.13.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.13.0...v2.13.0
[2.12.3]: https://github.com/dotnet/Open-XML-SDK/compare/v2.12.3...v2.12.1
[2.12.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.12.1...v2.12.0
[2.12.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.12.0...v2.11.3
[2.11.3]: https://github.com/dotnet/Open-XML-SDK/compare/v2.11.3...v2.11.2
[2.11.2]: https://github.com/dotnet/Open-XML-SDK/compare/v2.11.2...v2.11.1
[2.11.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.11.1...v2.11.0
[2.11.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.11.0...v2.10.1
[2.10.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.10.1...v2.10.0
[2.10.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.10.0...v2.9.1
[2.9.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.9.1...v2.9.0
[2.9.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.9.0...v2.8.1
[2.8.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.8.1...v2.8.0
[2.8.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.8.0...v2.7.2
[2.7.2]: https://github.com/dotnet/Open-XML-SDK/compare/v2.7.1...v2.7.2
[2.7.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.7.0...v2.7.1
[2.7.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.6.1...v2.7.0
[2.6.1]: https://github.com/dotnet/Open-XML-SDK/compare/v2.6.0...v2.6.1
[2.6.0]: https://github.com/dotnet/Open-XML-SDK/compare/v2.5.0...v2.6.0