DocumentFormat.OpenXml 3.1.0

dotnet add package DocumentFormat.OpenXml --version 3.1.0                
NuGet\Install-Package DocumentFormat.OpenXml -Version 3.1.0                
此命令旨在在 Visual Studio 中的包管理器控制台中使用,因为它使用 NuGet 模块的版本 Install-Package.
<PackageReference Include="DocumentFormat.OpenXml" Version="3.1.0" />                
对于支持 PackageReference 的项目,请将此 XML 节点复制到项目文件中以引用包。
paket add DocumentFormat.OpenXml --version 3.1.0                
#r "nuget: DocumentFormat.OpenXml, 3.1.0"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此内容复制到交互式工具或脚本的源代码中以引用包。
// Install DocumentFormat.OpenXml as a Cake Addin
#addin nuget:?package=DocumentFormat.OpenXml&version=3.1.0

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

Open XML SDK

[!NOTE]

v3.0.0 重新整理并解决了某些技术债务,同时尽可能保留源兼容性。您应该能够以有限的方式更新您的包并重新编译。然而,二进制兼容性并非目标,这将对一些有文档说明的更改造成破坏。引入此类更改的 PR 被标记为 breaking-change 标签,并被添加到列表中,以帮助迁移到 v3.0.0。

请参阅 v3.0.0 里程碑,了解包含的问题和 PR。有关讨论,请加入我们在此 问题

[!IMPORTANT] CI 频道 URL 已于 2024 年 4 月 2 日更改。如果使用 CI 构建,请更新为新 URL。

Downloads Build Status Backend Status

Open XML SDK 提供了用于处理 Office Word、Excel 和 PowerPoint 文档的工具。它支持以下场景:

  • 高性能的文档、电子表格和演示文稿生成。
  • 文档修改,例如添加、更新和删除内容以及元数据。
  • 使用正则表达式搜索和替换内容。
  • 将文件分割成多个文件(切碎),或将多个文件合并成一个文件。
  • 更新 Word/PowerPoint 中图表的缓存数据和嵌入的电子表格。

目录

Open XML SDK 的官方发布 NuGet 包位于 NuGet.org

下载 预发布
DocumentFormat.OpenXml.Framework NuGet NuGet
DocumentFormat.OpenXml NuGet NuGet
DocumentFormat.OpenXml.Linq NuGet NuGet
DocumentFormat.OpenXml.Features NuGet NuGet

每日构建

Open XML SDK 最新构建的 NuGet 包可以作为 Azure 块上的自定义源。这里的稳定发布将镜像到 NuGet 并保持相同。您必须设置一个类似以下内容的 NuGet.config 文件

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

有关最新变更,请参阅 变更日志

框架支持

该包目前支持以下目标

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

有关平台支持详情,包括 Mono 和 Unity 等其他运行时,请参阅 https://docs.microsoft.com/en-us/dotnet/standard/net-standard 上的文档。

已知问题

  • 在 .NET Core 和 .NET 5 及以上版本中,ZIP 包没有数据流的方式。因此,在某些情况下,工作集可能会膨胀。这是一个 已知问题
  • 在 .NET Framework 中,在某些情况下可能会抛出 IsolatedStorageException。这通常发生在在 AppDomain 证据不足的环境下操作大型文档的情况下。一个带有解决方案的示例在此这里

文档

有关官方文档,请参阅 Open XML SDK

如果您有如何操作的问题

  • Open XML SDK 2.5 生产工具:该生产工具提供了与 Open XML SDK 2.5 兼容的查看和代码生成。
  • Open XML Powertools:这提供了实现各种 Open XML 场景的示例代码和指导。
  • ClosedXml:此库在 OpenXml SDK 的基础上提供了一个简化的对象模型,用于操作和创建 Excel 文档。
  • OfficeIMO:此库在 Openxml SDK 的基础上提供了一个简化的对象模型,用于操作和创建 Word 文档。
  • Serialize.OpenXml.CodeGen:这是一个将 OpenXml 文档转换为创建它的所需 .NET 代码的工具。
  • Html2OpenXml:这是一个将 HTML 转换为 Openxml 文档的工具。
  • DocxToSource:这是一个旨在替代旧 OpenXML SDK 生产工具的工具。
  • OOXML Viewer:这是一个Visual Studio Code扩展,用于查看和编辑Office Open XML文件的xml部分,并可在从外部程序保存时查看与OOXML部分之前的版本的差异。在VS Code扩展选项卡中搜索“OOXML”,或从VS Code市场下载。
  • ShapeCrawler:这个库在OpenXml SDK之上提供了一个简化的对象模型,用于操作PowerPoint文档。
  • OOXML Validator:VS Code扩展用于验证Office Open XML文件。在VS Code扩展选项卡中搜索“OOXML”,或从VS Code市场下载。

如何贡献?

我们欢迎贡献!世界上许多人都帮助使这个项目变得更好。

  • 贡献解释了我们欢迎何种类型的贡献

报告安全问题和安全漏洞

安全问题和漏洞应通过电子邮件私下报告给微软安全响应中心(MSRC)[email protected]。您应该在24小时内收到回复。如果由于某种原因您没有收到回复,请通过电子邮件跟进,以确保我们收到了您的原始消息。更多信息,包括MSRC PGP密钥,可以在安全技术中心找到。

.NET基金会

Open XML SDK是.NET基金会的项目。

本项目已采用由贡献者公约定义的行为准则,以明确我们社区的预期行为。更多信息请见.NET基金会行为准则

许可

Open XML SDK在MIT许可下发布。

产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net35 是兼容的。 net40 是兼容的。 net403 已计算。 net45 已计算。 net451 已计算。 net452 已计算。 net46 是兼容的。 net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解有关 目标框架.NET 标准的更多信息

NuGet 包 (747)

显示对 DocumentFormat.OpenXml 依赖的前 5 个 NuGet 包

下载
ClosedXML

查看发行说明 https://github.com/ClosedXML/ClosedXML/releases/tag/0.104.0-preview2 ClosedXML 是一个用于阅读、操作和写入 Excel 2007+ (.xlsx, .xlsm) 文件的 .NET 库。它旨在提供一种直观且用户友好的界面来处理底层的 OpenXML API。

Omnia.Fx.NetCore

包描述

Microting.eForm

包描述

OpenXmlPowerTools

OpenXmlPowerTools 提供了与 Open XML 文档(DOCX、XLSX 和 PPTX)编程的指南和示例代码。它基于 Open XML SDK 并扩展了其功能。它支持以下场景:• 将 DOCX/PPTX 文件拆分为多个文件。• 将多个 DOCX/PPTX 文件合并为单个文件。• 使用 XML 数据填充模板 DOCX 文件中的内容。• 以高保真度将 DOCX 转换为 HTML。• 使用正则表达式在 DOCX/PPTX 中搜索和替换内容。• 管理跟踪修订,包括检测跟踪修订和接受跟踪修订。• 更新 DOCX/PPTX 文件中的图表,包括更新缓存数据以及嵌入的 XLSX。• 从 DOCX 文件中检索指标,包括所使用的样式层次结构、所使用的语言和所使用的字体。• 使用比直接编写标记更简单的代码编写 XLSX 文件,包括一种使写入具有数百万行记录的 XLSX 文件成为可能的流式方法。

SpreadsheetLight

SpreadsheetLight 是一个用 C# 编写的开源 Open XML 工作表 .NET 库,在 MIT 许可下发布。您可以使用它创建新 Open XML 工作表,或处理兼容 Microsoft Excel 2007/2010/2013 和 LibreOffice Calc 的现有 Open XML 工作表。无需 Office/Excel Interop。您不需要安装 Microsoft Office/Excel。

GitHub 仓库 (62)

显示依赖于 DocumentFormat.OpenXml 的前 5 个最受欢迎的 GitHub 仓库

仓库 星级
microsoft/semantic-kernel
快速轻松地将前沿的 LLM 技术集成到您的应用中
OrchardCMS/OrchardCore
Orchard Core 是一个用 ASP.NET Core 构建的开放式模块化和多租户应用程序框架,该框架之上是一个内容管理系统(CMS)。
ClosedXML/ClosedXML
ClosedXML 是一个用于读取、操作和写入 Excel 2007+ (.xlsx, .xlsm) 文件的 .NET 库。它旨在提供一种直观且用户友好的界面来处理底层的 OpenXML API。
radzenhq/radzen-blazor
Radzen Blazor 是一组包含 DataGrid、Scheduler、Charts 和丰富的主题(包括 Material Design 和 FluentUI)的 70 多个免费原生 Blazor UI 组件。
FastReports/FastReport
FastReport 是一个免费的 .NET6/.NET Core/.NET Framework 开源报告工具,可以帮助您的应用程序生成类似文档的报告。
版本 下载 最后更新
3.1.0 51,058 7/30/2024
3.0.2 1,917,618 3/14/2024
3.0.1 1,364,477 1/9/2024
3.0.0 998,897 11/15/2023
3.0.0-beta0003 19,921 9/5/2023
3.0.0-beta0002 18,971 6/14/2023
2.20.0 9,078,629 4/6/2023
2.19.0 4,619,137 12/14/2022
2.18.0 5,264,315 9/7/2022
2.17.1 3,151,158 6/30/2022
2.16.0 27,740,774 3/15/2022
2.15.0 4,995,893 12/17/2021
2.14.0 2,071,410 10/28/2021
2.14.0-beta0001 20,707 9/20/2021
2.13.1 3,148,716 8/18/2021
2.13.0 3,971,782 5/13/2021
2.13.0-beta0002 6,579 4/20/2021
2.13.0-beta0001 14,234 3/10/2021
2.12.3 3,176,294 2/24/2021
2.12.2 357,649 2/17/2021
2.12.1 1,906,678 1/11/2021
2.12.0 2,048,914 12/15/2020
2.11.3 7,432,741 7/17/2020
2.11.2 307,035 7/10/2020
2.11.1 7,657 7/10/2020
2.11.0 2,134,954 5/21/2020
2.11.0-beta0001 47,285 3/25/2020
2.10.1 4,781,397 2/28/2020
2.10.0 1,987,088 1/10/2020
2.10.0-beta0002 260,849 7/11/2019
2.10.0-beta0001 67,117 6/10/2019
2.9.1 9,862,924 3/13/2019
2.9.0 1,139,719 1/25/2019
2.8.1 8,386,026 1/6/2018
2.8.0 155,733 12/30/2017
2.7.2 46,172,775 6/7/2017
2.7.1 528,452 5/1/2017
2.5.0 12,874,893 8/4/2013
1.0.0 1,872,005 6/18/2011

# 更新日志

本项目所有显著更改都将在此文件中记录。

格式基于 [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
且本项目遵循 [语义版本控制](http://semver.org/spec/v2.0.0.html)。

## [3.0.2] - 2024-03-14

### 修复

- 修复了临时文件可共享且无法在关闭时删除的问题 (#1658)

## [3.0.1] - 2024-01-09

### 修复

- 修复了如果要确保内容类型正确,则文档类型可能不正确的问题 (#1625)
- 添加了检查以仅针对支持包进行搜索 (#1644)
- 如果遇到格式不正确的URI,异常现在与v2.x相同(《OpenXmlPackageException`,包含内部`UriFormatException`) (#1644)

## [3.0.0] - 2023-11-15

### 添加了

- 现在如果使用路径或流构造,则在.NET Core和.NET 5+上可以保存包 (#1307)。
- 现在可以支持格式不正确的URI(例如具有`mailto:`等URI的关系)
- 引入了`OpenXmlElement`的相等比较器 (#1476)
- `IFeatureCollection`现在可以枚举,并有一个有用的调试视图,可以查看已注册的功能 (#1452)
- 在部分创建中添加了MIME类型 (#1488)
- `DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main`命名空间
- `DocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main`命名空间
- `DocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021`命名空间

### 修改了

- 当验证发现不正确的部分时,现在将包括关系类型而不是类名
- `IDisposableFeature`现在是框架包的一部分,并且默认情况下在包或部分中可用。

### 破坏性变化

- .NET Standard 1.3不再受支持。.NET Standard 2.0是最低支持的.NET Standard。
- 核心基础设施现在包含在一个新的包DocumentFormat.OpenXml.Framework中。类型类仍在DocumentFormat.OpenXml中。这意味着您可以引用DocumentFormat.OpenXml并编译相同的类型,但如果要使用更小的包,则可以仅依赖于框架包。
- 将`OpenXmlPackage.Package`的类型更改为`DocumentFormat.OpenXml.Packaging.IPackage`,而不是`System.IO.Packaging.Package`,API界面类似
- `EnumValue<T>`现在用于将结构封箱而不是`System.Enum`。这使得我们可以在不使用反射的情况下对它启用行为
- 为部分添加子部分的方法(例如`AddImagePart`)现在作为新标记接口`ISupportedRelationship<T>`的扩展方法实现
- 部分类型信息枚举(例如`ImagePartType`)不再是枚举,而是一个暴露知名部分类型为结构的静态类。现在任何用于定义新的内容类型/扩展对的方法都可以使用新的`PartTypeInfo`结构调用,该结构将包含必要的信息。
- `OpenXmlPackage.CanSave`现在是一个实例属性 (#1307)
- 删除了`OpenXmlSettings.RelationshipErrorHandlerFactory`和相关类型,并使用内置机制启用此功能
- `IdPartPair`现在是一个只读结构而不是一个类
- 将`PartExtensionProvider`重命名为`IPartExtensionFeature`,并将其接口面积减少到只有两种方法(而不是一个完整的`Dictionary<,>`)。从`OpenXmlPackage`访问此功能的属性已被删除,但在需要时可通过`Features.Get<IPartExtensionFeature>()`访问。
- `OpenXmlPart`/`OpenXmlContainer`/`OpenXmlPackage`和派生类型现在具有内部构造函数(这些具有内部抽象方法,所以很可能外部没有子类)
- `OpenXmlElementList`现在是一个结构,实现了`IEnumerable<OpenXmlElement>`和`IReadOnlyList<OpenXmlElement>`接口(如果可用) (#1429)
- 现在有每个包类型的单独实现`OpenXmlPartReader`(例如`WordprocessingDocumentPartReader`、`SpreadsheetDocumentPartReader`、`PresentationDocumentPartReader`),并且之前的`TypedOpenXmlPartReader`已被删除。 (#1403)
- 除了DocumentFormat.OpenXml.Framework包外,减少了不必要的目标框架 (#1471)
- 修改了某些属性名中的拼写问题 (#1463, #1444)
- `Model3D`现在表示修改后的xml元素标签名`am3d.model3d`(以前为`am3d.model3D`)
- 删除了`DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfo`
- 删除了`DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuid`
- 删除了未使用的`SchemaAttrAttribute` (#1316)
- 删除了未使用的`ChildElementInfoAttribute` (#1316)
- 删除了`OpenXmlSimpleType.TextValue`。此属性从未打算用于外部 (#1316)
已从SDK的v1版本中移除了过时的验证逻辑(#1316)
从2.x版本中移除了过时的方法(#1316)
从OpenXmlAttribute中移除了可变属性,并将其标记为`readonly`(#1282)
优先使用`Dispose`,移除了`OpenXmlPackage.Close`(#1373)
优先使用`Clone`,移除了`OpenXmlPackage.SaveAs`(#1376)

## [2.20.0]

### 添加了

添加了DocumentFormat.OpenXml.Office.Drawing.Y2022.ImageFormula命名空间
添加了DocumentFormat.OpenXml.Office.Word.Y2023.WordML.Word16DU命名空间

### 修改了

将`OpenXmlSimpleType.TextValue`标记为过时。该属性从未打算供外部使用(#1284)
将`OpenXmlPackage.Package`标记为过时。在未来版本中,这将成为实现细节,且不可访问(#1306)
将`OpenXmlPackage.Close`标记为过时。这将在后续版本中被移除,请使用`Dispose`代替(#1371)
将`OpenXmlPackage.SaveAs`标记为过时,因为它将在未来的版本中被移除(#1378)

### 修复

修复了vbaProject文件的错误文件扩展名(#1292)
修复了ImagePart的错误文件扩展名(#1305)
修复了customXml的错误大小写(#1351)
修复了AddEmbeddedPackagePart,以允许支持各种内容类型的正确扩展名(#1388)

## [2.19.0] - 2022-12-14

### 添加了

.NET 6目标支持修剪(#1243, #1240)
添加了DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData命名空间
添加了DocumentFormat.OpenXml.Office.PowerPoint.Y2019.Main.Command命名空间
添加了DocumentFormat.OpenXml.Office.PowerPoint.Y2022.Main.Command命名空间
添加了Child RichDataPivotCacheGuid到DocumentFormat.OpenXml.Office2010.Excel.PivotCacheDefinition

### 修复

在可能的情况下移除了反射使用(#1240)
修复了在克隆或创建副本时某些URI可能会更改的问题(#1234)
修复了FlatOpc生成中不会在.NET 6+上读取完整流的问题(#1232)
修复了恢复的链接不会正确加载的问题(#1207)

## [2.18.0] 2022-09-06

### 添加了

添加了DocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021命名空间(#1196)
为DocumentFormat.OpenXml.Wordprocessing.NumberingPictureBullet添加了durableId属性(#1196)
为类型化的元素、部分和包添加了一些基类(#1185)

### 修改了

调整LICENSE.md以符合.NET Foundation要求(#1194)
为内部服务进行了某些更改以提高性能

## [2.17.1] - 2022-06-28

### 移除

移除了预览命名空间DocumentFormat.OpenXml.Office.Comments.Y2020.Reactions,因为该命名空间目前会创建无效文档。

### 修复

恢复了PowerPointCommentPart与PresentationPart之间的关系。

### 弃用

PowerPointCommentPart与PresentationPart之间的关系已被弃用,将在未来的版本中被移除。

## [2.17.0] - 未发布

### 添加了

添加了DocumentFormat.OpenXml.Office.Comments.Y2020.Reactions命名空间(#1151)
添加了DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotVersionInfo命名空间(#1151)

### 修复

将PowerPointCommentPart关系移至SlidePart(#1137)

### 更新

移除了公共API分析器,转而使用EnablePackageValidation(#1154)

## [2.16.0] - 2022-03-14

### 添加了

添加了方法`OpenXmlPart.UnloadRootElement`,当根元素被加载时会将其卸载(#1126)

### 更新

将架构代码生成移至SDK项目,使用C#代码生成器

感谢以下人员的贡献

@f1nzer

## [2.15.0] - 2021-12-16

### 添加了

向`./samples`目录添加了强类型类和Linq-to-XML的示例(#1101, #1087)
在`DocumentFormat.OpenXml.Features`和`DocumentFormat.OpenXml.Linq`中提供了额外的库,以提供一些额外的功能。有关详细信息,请参阅存储库中的文档。
添加了支持获取图像部分类型的扩展方法(#1082)
为新的订阅模型类型和约束添加了生成类和`FileFormatVersions.Microsoft365`(#1097)。

### 修复

修复了更改的MIME类型`model/gltf.binary`的问题(#1069)
DocumentFormat.OpenXml.Office.Drawing.ShapeTree现在仅在Office 2010及以上版本中可用,不再是2007版本。
正确序列化`new CellValue(bool)`值(#1070)
将已知命名空间更新为通过存储库中的源生成器生成(#1092)
关于 `FileFormatVersions` 枚举的一些文档问题

感谢以下人士的贡献

@ThomasBarnekow
@stevenhansen
@JaimeStill
@jnyrup

## [2.14.0] - 2021-10-28

### 添加了

- 添加了针对 Office 2021 类型及其约束的生成类(#1030)
- 在 `OpenXmlPartContainer` 和 `OpenXmlElement` 中添加了 `Features` 属性,以启用按部分或按文档的状态存储
- 为 `XmlPath` 添加了公共构造函数(#1013)
- 添加了富数据类型的部件(#1002)
- 添加了生成唯一段落 ID 的方法(#1000)

感谢以下人士的贡献

@rmboggs
@ThomasBarnekow

## [2.13.1] - 2021-08-17

### 修复

- 修复了一些错误定义的 nullability 注释(#953, #955)
- 修复了在特定情况下创建 `XmlReader` 时会释放 `TextReader` 的问题(#940)
- 修复了文档类型问题(#937)
- 修复了向数据部分添加额外子元素的问题(#934)
- 将一些泛型值文档条目替换为有用的注释(#992)
- 修复了 AddDataPartRelationship 的回归问题(#954)

感谢以下人士的贡献

@ThomasBarnekow
@sorensenmatias
@lklein53
@lindexi

## [2.13.0] - 2021-05-13

### 添加了

- 添加了与 Open Specifications 匹配的 O19 类型(#916)
- 添加了针对 Office 2019 类型及其约束的生成类(#882)
- 添加了 nullability 属性(#840, #849)
- 为 `OpenXmlPartReader` 和 `OpenXmlReader.Create(...)` 添加了重载,以忽略空白(#857)
- 添加了 `HexBinaryValue.TryGetBytes(...)` 和 `HexBinaryValue.Create(byte[])` 来管理字节的编码和解码(#867)
- 在 `IdPartPair` 上实现了 `IEquatable(IdPartPair)`,以修复该处的相等性实现并弃用设置器(#871)

### 修复

- 修复了 `CellValue` 构造函数的序列化,使用不变文化来进行(#903)
- 修复了解析以允许数字单元格值中的指数(#901)
- 修复了涉及 `UniqueAttributeValueConstraint` 时的巨大性能瓶颈(#924)

### 弃用

- 弃用 Office2013.Word.Person.Contact 属性。它不再持久化,并将在未来版本中删除(#912)

感谢以下人士的贡献

@lklein53
@igitur

## [2.12.3] - 2021-02-24

### 修复

- 修复了 `CellValue` 可能对布尔值进行错误验证的问题(#890)

## [2.12.2] - 2021-02-16

### 修复

- 修复了 `OpenSettings.RelationshipErrorHandlerFactory` 会在结果 URI 小于输入时创建无效 XML 的问题(#883)

## [2.12.1] - 2021-01-11

### 修复

- 修复了在 `OpenXmlCompositeElement` 实例上设置属性无法设置为 null 以移除元素的问题(#850)
- 修复了 `OpenXmlElement.RawOuterXml` 以正确设置空值而不会引发异常(#818)
- 允许重写所有格式不正确的 URI,而不考虑目标值(#835)

## [2.12.0] - 2020-12-09

### 添加了

- 添加 `OpenSettings.RelationshipErrorHandlerFactory` 以提供处理格式的 URI 的方法,这些 URI 会破坏恶意链接的文档解析(#793)
- 添加 `OpenXmlCompositeElement.AddChild(OpenXmlElement)` 以按照模式正确顺序添加子元素(#774)
- 用 `SmartTagClean` 和 `SmartTagId` 替换了 `SmtClean` 和 `SmtId`(#747)
- 添加 `OpenXmlValidator.Validate(..., CancellationToken)` 重载以允许更容易地取消在 .NET 4.0+ 上的长期运行验证(#773)
- 为 `CellValue` 添加了 Overloads 以接受 `decimal`、`double` 和 `int` 以及方便它们的解析方法(#782)
- 添加了 `CellType` 的验证,用于数字和日期格式(#782)
- 添加 `OpenXmlReader.GetLineInfo()` 以在底层读取器可用时检索 `IXmlLineInfo`(#804)

### 修复

- 修复了在文档包含 SVG 文件时尝试保存文档为 FlatOPC 会抛出异常的问题(#822)
- 添加 `SchemaAttrAttribute` 属性以实现向后兼容性(#825)

### 移除

- 在 .NET 4.6 版本构建中删除了对 `System.IO.Packaging` 的显式引用(#774)

## [2.11.3] - 2020-07-17

### 修复

- 修复了涉及 `IndexReferenceConstraint` 和 `ReferenceExistConstraint` 时的巨大性能瓶颈(#763)
- 修复了 `CellValue` 在第二次分数中只包含三个最显著数字以修复加载日期的问题(#741)
- 修复了一两个可能导致错误验证错误的验证索引错误(#767)
- 更新内部验证系统,不再使用递归,允许更好的短路操作(#766)

## [2.11.2] - 2020-07-10

### 修复

- 修复了断裂的源链接(#749)
- 确保编译是一致的(#749)
- 从NuGet包中删除了额外的文件(#749)

## [2.11.1] - 2020-07-10

### 修复

- 确保.NET Framework构建可成功通过PEVerify(#744)
- `OpenXmlPartContainer.DeletePart`现在在给定的标识符没有匹配项的情况下不再抛出异常(#740)
- 将过时期员标记为不显示在Intellisense中(#745)
- 修复了`AttributeRequiredConditionToValue`语义约束中的问题,验证可能会在正确输入时失败(#746)

## [2.11.0] - 2020-05-21

### 添加了

- 添加了`FileFormatVersions.2019`枚举(#695)
- 添加了`ChartSpace`和图表元素为新2016命名空间,这允许构建具有“Sunburst”等图表样式的图表部分(#687)。
- 添加了`OpenXmlElementFunctionalExtensions.With(...)`扩展方法,这为在纯函数转换的上下文中构建`OpenXmlElement`实例提供了一种灵活的方法(#679)
- 为枚举类型和值添加了最小Office版本(#707)
- 添加了额外的`CompatSettingNameValues`值:`UseWord2013TrackBottomHyphenation`、`AllowHyphenationAtTrackBottom`和`AllowTextAfterFloatingTableBreak`(#706)
- 根据MS-OI29500 2.1.1783-1799将`gfxdata`属性添加到Arc、Curve、Line、PolyLine、Group、Image、Oval、Rect和RoundRect形状复杂类型中(#709)
- 添加了`OpenXmlPartContainer.TryGetPartById`以启用在不存在的情况下检索子部分,而不抛出异常(#714)
- 添加了`OpenXmlPackage.StrictRelationshipFound`属性,该属性指示此包是否包含从Strict转换的过渡关系(#716)

### 修复

- 自定义派生部分没有从其父部分继承已知部分,导致添加部分失败(#722)

### 修改了

- 将`OpenXmlAttribute`中的属性设置器标记为过时,因为结构不应该有可变状态(#698)

## [2.10.1] - 2020-02-28

### 修复

- 确保可用性属性在将外部XML初始化为`OpenXmlElement`时可用(#684,#692)
- 一些文档错误(#681)
- 移除了在某些条件下验证元素会导致非线程安全的分配状态(#686)
- 正确插入强类型元素在已知非强类型元素之前(#690)

## [2.10.0] - 2020-01-10

### 添加了

- 添加了初始Office 2016支持,包括`FileFormatVersion.Office2016`、`ExtendedChartPart`和其他新架构元素(#586)
- 添加.NET Standard 2.0目标(#587)
- 包含符号支持以进行调试(#650)
- 从`XmlPath`中暴露`IXmlNamespaceResolver`而不是格式化的字符串列表以暴露命名空间/前缀映射(#536)
- 在`OpenXmlComparableSimpleValue`上实现了`IComparable<T>`和`IEquatable<T>`,以允许无装箱的比较(#550)
- 添加`OpenXmlPackage.RootPart`以轻松访问任何包上的根部分(#661)

### 修改了

- 更新到System.IO.Packaging的v4.7.0,其中包含许多性能修复(#660)
- 合并了元素子/属性的数据以减少重复(#540,#547,#548)
- 将元素子约束的不透明二进制数据替换为声明性模型(#603)
- 在可能的情况下进行了大量的性能修复以最小化分配
- 大小减少20%,从5.5MB减少到4.3MB
- 验证子系统经历了彻底的重设计。这可能导致错误报告的变化。

### 修复

- 修复了一些文档不一致之处(#582)
- 修复了`ToFlatOpcDocument`、`ToFlatOpcString`、`FromFlatOpcDocument`和`FromFlatOpcString`以正确处理替代格式导入部分或“altChunk parts”(#659)

## [2.9.1] - 2019-03-13

### 修改了

- 添加了一个绕过.NET Native编译器问题的解决方案,该问题不支持使用包含自动实现的属性的struct调用`Marshal.SizeOf<T>`(#569)
- 修复了一个文档错误(#528)

## [2.9.0] - 2018-06-08

### 添加了

- `ListValue`现在实现了`IEnumerable<T>`(#385)
- 添加了一个`WebExtension.Frozen`并废弃了拼写错误`Fronzen`属性(#460)
- 添加了`OpenXmlPackage.CanSave`属性,该属性指示平台是否支持在不关闭包的情况下保存(#468)
- 简单类型(除`EnumValue`和`ListValue`外)现在实现了`IComparable<T>`和`IEquatable<T>`(#487)

### 修改了

- 删除了在验证器中携带的、当未使用时保留包的状态 (#390)
- 改进了 `EnumSimpleType` 的解析,并减少了未来的分配和缓存使用 (#408)
- 修复了文档中的若干拼写错误 (#462)
- 当在 .NET Framework 上调用 `OpenXmlPackage.Save` 时,现在将包刷新到流中 (#468)
- 修复了执行严格的属性转换时的竞态条件 (#480)
- 验证使用的模式数据使用更紧凑的格式,导致 dll 尺寸减小,并提高了加载性能 (#482, #483)
- 一些 API 被标记为过时,因为它们有简单的解决方案,将在下一个主要更改中删除
- 修复了一些包含 Office 2007 的约束值,即使它仅支持在后续版本中也是如此
- 更新了 `System.IO.Packaging` 到 4.5.0,这修复了 Xamarin 平台上的一些问题,并最大程度减少了依赖于 .NET Framework

## [2.8.1] - 2018-01-03

### 修改了

- 修正了包许可证文件引用,以显示更新的 MIT 许可证

## [2.8.0] - 2017-12-28

### 添加了

- 默认运行时指令以更好地支持 .NET Native。

### 修改了

- 修复了部分保存时使用 UTF8 编码但无字节顺序标记,这导致某些渲染器无法打开生成的文档
- 修复了在打开包时遇到错误时抛出的异常,以确保跨平台的一致性。
- 修复了在 Mono 平台使用 System.IO.Packaging NuGet 包(Xamarin 等)创建文档时的问题。
- 修复了自动保存为 false 时的包手动保存问题。
- 修复了模式约束数据和跨平台标准化序列化。
- 升级到 `System.IO.Packaging` 版本 4.4.0,该版本修复了在打开包时与 .NET Framework 的一些一致性问题。

## [2.7.2] - 2017-06-06

### 添加了

- 包现在支持 .NET 3.5 和 .NET 4.0,除了 .NET Standard 1.3 和 .NET Framework 4.6

### 修改了

- 修复了未设置程序集版本号的问题。

## [2.7.1] - 2017-01-31

### 修改了

- 修复了在强制实施强名称的 .NET Framework 上调用验证引发崩溃的问题。

## [2.7.0] - 2017-01-24

### 添加了

- SDK 现在支持 .NET Standard 1.3

### 修改了

- 移至使用 System.IO.Packaging(.NET Standard 1.3 和 WindowsBase,.NET 4.5)。
- 清理了项目构建系统以使用 .NET CLI。

## [2.6.1] - 2016-01-15

### 添加了

- 添加了数百个 XUnit 测试。现在总共有 1333 个测试。它们大约需要 20 分钟才能运行,所以请耐心等待。

## [2.6.0] - 2015-06-29

### 添加了

- 集成了替换 `System.IO.Packaging` 来修复 WindowsBase 实现中发现的某些严重(但异常)的错误。

[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