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. WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧

    liwen01 2024.09.22 前言 前面介绍了 WiFi 的工作原理和 WiFi 的接入过程,这里将通过分析 WiFi 具体数据包结构,让你对 WiFi 工作原理和接入过程有一个更进一步的了解 ...

  2. 数组 findIndex 方法去重

    思路:先使用 findIndex 找到重复元素的下标,然后使用 splice 方法删除 :

  3. 云原生的 WebAssembly 能取代 Docker 吗?

    WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择.现 ...

  4. Linux 基础-查看进程命令 ps 和 top

    目录 1,使用 ps 命令找出 CPU 占用高的进程 2,通过 top 命令定位占用 cpu 高的进程 3,htop 系统监控与进程管理软件 4,参考资料 1,使用 ps 命令找出 CPU 占用高的进 ...

  5. Redis数据结构:List类型全面解析

    文章目录 一.List数据类型 1.1 简介 1.2 应用场景 1.3 底层结构 二.数据结构 2.1 压缩列表ZipList 2.2 双向链表LinkedList(后续已废弃) 2.3 快速链表Qu ...

  6. QT中的宏定义

    1.操作系统宏 //在<QtGlobal>中,定义了各个系统的宏定义 //Defined on AIX. #ifdef Q_OS_AIX // Defined on Android. #d ...

  7. TP6 使用 nusoap为第三方webservice调用插件

    composer下载插件 composer require nusoap/nusoap use NuSoap\Client\Client; class Index extends BaseContro ...

  8. 劉玥 的国内网站 —— https://spicy-gum.com

    劉玥 的国内网站 -- https://spicy-gum.com

  9. 焕然一新!TinyVue 组件库 UI 大升级,更符合现代的审美!

    你好,我是 Kagol,个人公众号:前端开源星球. 自从 TinyVue 组件库去年开源以来,一直有小伙伴反馈我们的 UI 不够美观,风格陈旧,不太满足现阶段审美. "TinyVue 给我的 ...

  10. 根据不同的dpi 媒体查询

    /* 默认样式 */ .element { width: 100px; height: 100px; background-color: blue; } /* 当设备像素比为1.5时,调整.eleme ...