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. Windows远程设置''不可复制''的权限

    起因: 有一个技术部门的同事需要远程其他同学的电脑进行操作,但是不允许他复制目标电脑上的文件,避免造成资料外泄 解决办法: 组策略编辑器中,设置 计算机配置 -> 管理模板 -> wind ...

  2. ShardingSphere系列(一)——ShardingSphere-JDBC初体验

    Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC.Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品 ...

  3. 如何增加kasan 出现问题 重启

    要通过启动参数启用或配置 Kernel Address Sanitizer (KASAN) 并设置相关的行为,你可以在启动 Linux 内核时添加以下参数: 启用 KASAN:使用 kasan=1 来 ...

  4. 批量解压zip文件到指定位置

    话不多说,直接上代码. # coding:utf-8 import zipfile import utils_file n = 21 # 我事先知道我有多少个文件,所以确定为21 for i in r ...

  5. 02-react中jsx的基本使用

    // 使用 createElement太繁琐 不直观 不优雅开发体验不好 代码维护不行 // jsx 不是 js 而是 js的扩展语法 // jsx 是react的核心内容 // react项目中已经 ...

  6. Linux的Terminal调用不出来,一直转圈圈

    后来发现是环境变量的问题 [oracle@ora19rac01 ~]$ cat .bash_profile # .bash_profile # Get the aliases and function ...

  7. KubeSphere 宣布开源 Thanos 的企业级发行版 Whizard

    日前,青云科技宣布开源 Thanos 的企业级发行版 Whizard,为企业带来真正高可用.可扩展.可存储与查询海量监控数据.易运维.安全的 Prometheus 长期存储方案. Prometheus ...

  8. KubeSphere 社区双周报|2024.05.09-05.23

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  9. 基于 Python + Vue3!一个轻量级的域名和 SSL 证书监测平台!

    大家好,我是 Java陈序员. 在企业开发中,由于业务众多,涉及到很多业务域名证书,证书过期由于遗忘常常未能及时续期,导致线上访问异常,给企业带来损失! 今天,给大家介绍一个轻量级的域名和 SSL 证 ...

  10. CF1737D Ela and the Wiring Wizard

    CF1737D Ela and the Wiring Wizard 题意简述 形象化的,对于一个边,我们可以做以下变换: 将一条边变为自环 将边的一个端点沿着其他边移动 总的来说,就是边的两个端点可以 ...