Development with Open XML

1. 准备开发环境

1.1 Open XML SDK

现在最新的 OpenXML SDK 版本是 2.12.1 (2021/1),需要通过 NuGet 下载。NuGet: https://www.nuget.org/packages/DocumentFormat.OpenXml/

微软官方的文档有的是 2.5,有的是 2.7,还没有统一到最新的版本上来,看微软文档的时候要注意。

这是微软官方 docs 的地址: https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

API 文档:Open XML SDK 2.5 class library reference

微软官方提供了一系列的示例,演示了多种场景下,如何使用 OpenXML SDK 进行处理:

How do I...(OpenXML SDK)

通常找到的微软官方 OpenXML SDK 下载是 2.5 版本的,比较老了。不建议使用它。

Open XML SDK 2.5 for Microsoft Office: https://www.microsoft.com/en-us/download/details.aspx?id=30425

微软已经将 OpenXML SDK 的源码发布到 GitHub 上,GitHub: https://github.com/OfficeDev/Open-XML-SDK/

1.2 Open XML SDK Tools

微软同时提供了一个 OpenXML SDK 的图形界面工具,可以直接打开文档,并提供生成对应内容的 C# 代码。

Open XML SDK 2.5 for Microsoft Office

https://www.microsoft.com/en-us/download/details.aspx?id=30425

1.3 Open Xml Power Tools

原来微软还维护一个 OpenXML 的开发工具集 Open XML Power Tools,现在从微软的分支中转移到一个独立的分支。

它使用 LINQ to XML 技术来提供性能,提供了各种高级场景的开发工具和示例。在 NuGet 上提供了开发包 OpenXmlPowerTools,可以直接安装使用,NuGet 地址:https://www.nuget.org/packages/OpenXmlPowerTools/

源代码可以在 GitHub 上找到:https://github.com/EricWhiteDev/Open-Xml-PowerTools

该库的维护者 Eric 同时创建了一个网站 Open XML Power Tools Developer Center 来提供支持。在这里,Eric 发布了博客和视频来帮助你使用该库。

不过,有一个问题,该库在 .NET Core 下会出现问题。目前只能在 .NET Framework 下使用。

由于 OpenXML SDK 在打开文档之后,实际上在内存中构建了一个 XML DOM 树,而 Power Tools 没有直接操作该 DOM 树,而是使用了 Linq to XML 重新构建数据结构进行操作,在完成之后,直接替换原来的 XML DOM 树。由于 .NET Core 对于 XML 处理的问题,导致该异常。

异常内容

Unhandled exception. System.IO.IOException: Entries cannot be opened multiple times in Update mode.
at System.IO.Compression.ZipArchiveEntry.OpenInUpdateMode()
at System.IO.Compression.ZipArchiveEntry.Open()
at System.IO.Packaging.ZipStreamManager.Open(ZipArchiveEntry zipArchiveEntry, FileMode streamFileMode, FileAccess streamFileAccess)
at System.IO.Packaging.ZipPackagePart.GetStreamCore(FileMode streamFileMode, FileAccess streamFileAccess)
at System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
at System.IO.Packaging.PackagePart.GetStream(FileMode mode)
at DocumentFormat.OpenXml.Packaging.OpenXmlPart.GetStream(FileMode mode)
at DocumentFormat.OpenXml.OpenXmlPartRootElement.SaveToPart(OpenXmlPart openXmlPart)
at DocumentFormat.OpenXml.OpenXmlPartRootElement.Save()
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.SavePartContent(OpenXmlPart part)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.TrySavePartContent(OpenXmlPart part)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.SavePartContents(Boolean save)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.Save()
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.Clone(String path, Boolean isEditable, OpenSettings openSettings)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.Clone(String path)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.SaveAs(String path)

关于该问题的 Issues:

准备 OpenXML 开发环境的更多相关文章

  1. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  2. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  3. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  4. 在Ubuntu下搭建ASP.NET 5开发环境

    在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...

  5. Linux安装LAMP开发环境及配置文件管理

    Linux主要分为两大系发行版,分别是RedHat和Debian,lamp环境的安装和配置也会有所不同,所以分别以CentOS 7.1和Ubuntu 14.04做为主机(L) Linux下安装软件,最 ...

  6. Angular企业级开发(2)-搭建Angular开发环境

    1.集成开发环境 个人或团队开发AngularJS项目时,有很多JavaScript编辑器可以选择.使用优秀的集成开发环境(Integrated Development Environment)能节省 ...

  7. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  8. 使用ubuntu作为web开发环境的一些感受

    从ms-dos,win95,win98,winMe,winXp,vista,win7,win10我都有使用的经历,我使用时间最长的应属winxp,其次是win7,说实话,我觉得这两个系统是微软做的最好 ...

  9. 自定义搭建PHP开发环境

    学习了一段时间php了,因为之前是刚接触php,所以用的是集成安装包(wamp).现在想进一步了解apache.mysql.php之间的关系以及提升自己所以进行自定义搭建PHP开发环境.废话不多说,请 ...

  10. Nova PhoneGap框架 第十章 开发环境

    10.1 Visual Studio + ReSharper PhoneGap程序由HTML.CSS和JS编写而成,这3种语言的编写你都可以用记事本来完成,但显然效率比较低,出错的概率也比较大.一个强 ...

随机推荐

  1. docker安装及基本的镜像拉取

    docker 使用存储库安装 卸载它们以及相关的依赖项. yum remove docker \ docker-client \ docker-client-latest \ docker-commo ...

  2. C++指针等于地址加偏移量

    概述 本文通过c++示例代码演示指针的加减法运算及对 "指针 = 地址 + 偏移量" 的理解. 研究示例 1. 首先来检查各种变量类型所占的内存大小 #include <io ...

  3. 深入理解Redis锁与Backoff重试机制在Go中的实现

    目录 Redis锁的深入实现 Backoff重试策略的深入探讨 结合Redis锁与Backoff策略的高级应用 具体实现 结论 在构建分布式系统时,确保数据的一致性和操作的原子性是至关重要的.Redi ...

  4. Linux内核虚拟内存管理之匿名映射缺页异常分析

    今天我们就来讨论下这种缺页异常,让大家彻底理解它.注:本文使用linux-5.0内核源代码.文章分为以下几节内容: 匿名映射缺页异常的触发情况 0页是什么?为什么使用0页? 源代码分析 3.1 触发条 ...

  5. 04 Transformer 中的位置编码的 Pytorch 实现

    1:10 点赞 16:00 我爱你 你爱我 1401 class PositionalEncoding(nn.Module): def __init__(self, dim, dropout, max ...

  6. Linux+PXE+DHCP+TFTP+NFS实现无人值守安装

    一.实验环境:OS:Redhat6.4软件:DHCP服务.TFTP服务.NFS服务硬件:Dell R630服务器两台物理连接图: em1 em1 二.工作原理:服务器通过PXE网卡启动,从dhcp服务 ...

  7. 云原生周刊:Kubernetes v1.30 发布 | 2024.4.22

    开源项目推荐 pv-migrate pv-migrate 是一个 CLI 工具/kubectl 插件,可轻松将一个 Kubernetes 的内容迁移 PersistentVolumeClaim 到另一 ...

  8. 云原生周刊 | 人类、机器人与 Kubernetes

    近日 Grafana 官网发表了一篇博客介绍了 2022 年比较有意思.脑洞大开的一些 Grafana 使用案例,比如监控特斯拉 Model 3 的充电状态.OTA 更新状况等等. 海事技术供应商 R ...

  9. 如何在 ubuntu 上搭建 minio

    由于腾讯的对象存储服务器(COS)的半年免费试用期已过,所以寻思鼓捣一下 minio,试着在自己的服务器上搭建一套开源的 minio 对象存储系统. 单机部署基本上有以下两种方式. 直接安装 最基础的 ...

  10. IPV6改造 华为云如此简单

    现在很多企业都在搞这个IPV6改造,说实话这个IPV6改造我这边也不是特别精通,也是通过查阅各种资料来了解IPV6这个东西,下面是我查的一些资料大家可以借鉴一下. IPv6改造三步曲--Vecloud ...