dotnet OpenXML 解压缩文档为文件夹工具
做 Office 解析,是需要进行不断的测试才能了解 OpenXML 里面的属性的作用。根据 Ecma 376 的定义,文档其实只是一个压缩文件,可以使用压缩工具进行解压缩。但是我需要不断进行修改文档里面的属性,然后用 Office 打开,测试属性的效果,此时就需要有一个工具用来提升效率
工具的作用就是将 Office 文档,包括 Word 的 docx 和 PPT 的 pptx 和 Excel 的 xlsx 文档,解压缩文档到指定的文件夹里面
此时就可以使用编辑工具,如 SublimeText 或 VisualStudio 或 NotPad++ 等工具编辑 Office 文档的文件
编辑完成之后,可以通过工具将文件夹压缩为 Office 文档,使用 Office 打开,此时就可以看到属性的效果
工具在 GitHub 上完全开源,请看 https://github.com/dotnet-campus/dotnetCampus.OfficeDocumentZiper
使用方法是通过 dotnet 工具安装
dotnet tool isntall -g dotnetCampus.OfficeDocumentZipper
安装完成之后,可以使用命令行开启,如下面代码
OfficeDocumentZipper
如果不想写一个命令行,想要通过一个批处理启动,可以新建一个 x.bat 文件,添加下面代码
dotnet tool update -g dotnetCampus.OfficeDocumentZipper
OfficeDocumentZipper
注意在 bat 文件里面使用 update 代替 install 这样每次打开都是最新版本
这个工具的界面很简单,理论上你看界面就能使用
这个工具需要填写需要解压缩的 Office 文档的文件路径,以及解压缩到的文件夹路径。点击 UnZip 就是将 Office 文档解压缩到文件夹,如果文件夹存在,那么将会覆盖原有的文件夹。为什么这样设计?原因是我使用 SublimeText 打开了文件夹里面的 Part 文档,此时我不知道在 Office 上做对应的设置的行为,于是我就在工具里面点击 Open 打开 Office 文档,然后在 Office 里面编辑保存一下,此时文档的内容更改了。于是点击 UnZip 可以覆盖原有文件夹内容,我只需要让 SublimeText 自动刷新就可以看到在 Office 的更改的内容
在通过编辑工具修改了解压缩之后的文件之后,可以通过工具压缩为新的 Office 文档。每次都会创建新的 Office 文档文件
为什么每次都创建新的文档文件?原因是之前的 Office 文件也许在被打开,此时写入会失败,同时多个版本的 Office 文件方便对比,这样就知道多个版本更改的属性的作用
打开 Office 文档需要你本地安装了 Office 才能打开
这是一个 WPF 的 dotnet tool 工具,因此如果你不在 Windows 系统运行,你需要使用 Wine 才能运行
如果你有任何问题,都可以在 github 提 Issus 告诉我,当然,我也欢迎小伙伴贡献代码
我写了很多 Office 解析相关的博客,请看 Office 使用 OpenXML SDK 解析文档博客目录
在 SublimeText 打开 Office 的解压缩的 Part 文件,都是没有格式化的文件,可以安装 Indent XML 插件格式化
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-OpenXML-%E8%A7%A3%E5%8E%8B%E7%BC%A9%E6%96%87%E6%A1%A3%E4%B8%BA%E6%96%87%E4%BB%B6%E5%A4%B9%E5%B7%A5%E5%85%B7.html ,
- Elasticsearch聚合 之 Terms
- Elasticsearch聚合初探——metric篇
- AngularJS API之$injector ---- 依赖注入
- AngularJS API之extend扩展对象
- AngularJS API之equal比较对象
- Elasticsearch之_default_—— 为索引添加默认映射
- Elasticsearch 动态映射——自动检测
- Elaticsearch REST API常用技巧
- C++拷贝构造函数
- 记录安装oracle的那些事(一)之oracle我很大
- Elasticsearch 连接查询
- 小程序加戏成功!变身游戏成新版微信最大主角,用户玩得不亦乐乎
- 堆实例
- 大数加法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用Gaussian 16计算振动分辨的紫外-可见吸收光谱
- graylog日志分析系统上手教程
- 使用Seq搭建免费的日志服务
- 拜托!这才是分布式系统CAP的正确打开方式!
- 接口管理这下总会了吧?
- 交子杯 - 2020 - AI赛道 - TOP1
- Valine 一款快速、简洁且高效的无后端评论系统
- 两段有趣的C代码
- 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
- 并查集算法 详解
- SQL 中 EXISTS 用法详解
- Blazor带我重玩前端(六)
- PB 级大规模 Elasticsearch 集群运维与调优实践
- MySQL实时在线备份恢复方案
- Android通过原生请求直接获取网页内容