C#访问word应用软件需要先安装word,word会向系统注册COM组件,COM组件提供了外部应用程序的一个访问接口,通过这些接口,可以很方便地程序性地操作word软件中的各种COM对象的属性和方法。比如文字,图片,形状,段落,光标位置,字体,表格,边框,背景,公式,格式,书签,页面属性,页眉页脚,选择范围,查找/替换,剪贴板操作,响应事件等等,基本上能够在前台操作的功能,都能在类库中找到对应的接口。

Word软件COM接口定义了一套不变的标准,外部程序可以对这些标准的接口进行二次封装,从而构建更加稳定便捷的文档操作特性。

我们所看到的word软件界面在系统中被视为一个COM对象,对象类型为

Microsoft.Office.Interop.Word.Document 继承自_Document接口
这个接口提供了操作Word文档的所有方法/属性/事件。
一个Word应用程序可以包含多个word文档,一个Word应用程序在一个进程中运行

Word应用程序也是一个COM对象,类型为Microsoft.Office.Interop.Word.Application,

对于其中每一个方法如何使用可以访问微软官方文档MSDN

Microsoft.Office.Interop.Word Namespace | Microsoft DocsExplore all classes and interfaces of the Microsoft.Office.Interop.Word namespace.https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word?view=word-pia

新建一个Word应用程序实例

Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();

如果应用程序已经被创建,也可以直接获取已经创建的Word实例

application = (Application)Marshal.GetActiveObject("Word.Application");

新建一个Word文档实例,有两种方式:将已经存在的Word文件作为一个副本打开,相当于创建了一个Word文档对象,内容模板从另外一个文件中获取并重新构建

application.Documents.Add("路径")

另一种方式为打开文件的时候将文件锁住,不让其他应用程序修改文件内容,直到Document实例被关闭,保存或取消保存,才会更新文件,释放文件锁定。

application.Documents.Open(path)
COM接口中包含一部分事件,监听这些事件,可以与Word进行一些动态的内容交互
application.WindowSelectionChange += Application_WindowSelectionChange;
application.DocumentBeforeClose += Application_DocumentBeforeClose;

需要注意的是事件委托的方法必须使用多线程执行,防止外部应用程序阻塞了Word主线程

private static void Application_WindowSelectionChange(Selection Sel){App.Current.Dispatcher.Invoke((Action)(() =>{RocResultProcess.RocKeepon();RocResultProcess.HoldOn();RocResultProcess.AppendTitle($"Word选中事件回调");RocResultProcess.AppendLine($"选中的文本:{Sel.Text}" +$"\r\n字体:{Sel.Font.Name}" +$"\r\n字体颜色:{Sel.Font.Color.ToString()}" +$"\r\n字体大小:{Sel.Font.Size}" +$"\r\n字体加粗:{Sel.Font.Bold}" +$"\r\n选中部分所在文档的起始位置:{Sel.Start}" +$"\r\n选中部分所在文档的结束位置:{Sel.End}" +"");if (!string.IsNullOrWhiteSpace(Sel.Range.Text)){if (Sel.Range.Text=="/"){Sel.Copy();}else{Sel.Range.Copy();}Code.Library.Text.ShowRichTextInRoc();}RocResultProcess.HoldOff();RocResultProcess.RocKeepoff();}));}

成品展示

读取多个word文件的内容,进行加工处理,得到一个综合的数据模型,这个数据模型表示了Word内容的结构化信息,然后将数据模型格式化的输出到成RTF字节流,批量的写入一个新的word文件。

C#与Word文档的交互相关推荐

  1. vue 生产word_nodejs(officegen)+vue(axios)在客户端导出word文档

    前言 我的项目中有一个需求:点击按钮生成可编辑的word文档订单详情的信息 我使用的前端框架是Vue.js.后台使用的是node.js node.js生成和导出word文档我参考的是下面这两篇文章,写 ...

  2. kettle使用数据库来生成序列_Python办公自动化:使用python来自动生成word文档

    让python做办公自动化,让你闲下来 让python做自动化,让你闲下来 上节对python的excel Python办公自动化系列:自动操作Excel自动化做了介绍.这次介绍如何用python对w ...

  3. python读word文档doc公文标题_python – 从word doc中提取标题文本

    我试图从MS Word文档(.docx文件)中的标题(任何级别)中提取文本.目前我正在尝试使用python-docx来解决,但不幸的是我仍然无法弄清楚它是否在阅读之后是否可行(也许我错了). 我试图在 ...

  4. 利用PowerShell Empire实现Word文档DDE攻击控制(简单没啥用)

    近期,有安全人员发现了一种DynamicData Exchange (DDE)协议绕过MSWord和MSExcel宏限制,不需使用MSWord和MSExcel漏洞,就能实现在Office文档中执行恶意 ...

  5. word文档保存发生错误_文档还是没有发生

    word文档保存发生错误 关于社区建设 , 参与和保留的文字很多. 关于社区管理的讨论是活跃而活跃的,到处都有关于如何发展,支持而不破坏开源社区的文章和博客文章. 正如我在先前有关内容策略和文档的De ...

  6. java根据模板生成word文档_Python办公自动化:使用python来自动生成word文档

    让python做办公自动化,让你闲下来 让python做自动化,让你闲下来 上节对python的excel Python办公自动化系列:自动操作Excel自动化做了介绍.这次介绍如何用python对w ...

  7. Java之下载word文档,linux视频监控

    第二步:将ftl文件放入项目中.编写下载word的java代码. 项目的文件存放位置. 项目是比较简单的web项目,使用的是Struts2.下面是web.xml中的配置,一切从简. 只有一个简单的跳转 ...

  8. java实现导出内容不固定的word文档

    之前遇到过一个需求,需要导出一个word的周报,周报的内容是可变,然后网上找了下方法,下面摘抄一种方便的实现手段: Java用freemarker导出word 一.模板的制作 先用Word做一个模板, ...

  9. [摘]用Java生成Word文档

    开发中隔三叉五的就要用到Word,经常被搞得不胜其烦,不过这次找到了不少好例子,干脆将他们都摘了过来,内容如下: 1. poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这 ...

最新文章

  1. 从Zipkin到Jaeger,Uber的分布式追踪之道tchannel
  2. 托马斯反驳牛顿被骂,普朗克颜值过高遭上帝捉弄,狄拉克却因爱情成话痨
  3. 并发加对象锁_通用并发对象池
  4. RT-Thread移植
  5. TensorFlow 教程 --新手入门--1.4 win10环境安装实例
  6. 一些常用常新的数学公式(备查)
  7. 人工智能笔记11 --强化学习
  8. 数据仓库常见建模方法与大数据领域建模实例综述
  9. matlab 工具箱 comsol 联,基于MATLAB与COMSOL联合仿真的电磁优化设计
  10. 良心教程教你如何使用Excel简单绘制数据图表。
  11. 帝国CMS7.2重置后台密码
  12. 华为计算机的隐藏应用程序,华为平板5怎么隐藏软件 荣耀5平板怎么隐藏应用程序?...
  13. 2022年版中国腰果酚市场趋势研究与竞争策略分析报告
  14. 谷粒商城商品服务模块数据库文件关系
  15. FLy_buck 拓扑结构
  16. 经典影视剧《大宋提刑官》——老剧重看,再添心得
  17. 【数据处理】xml的创建、读写问题
  18. 自适应模拟退火粒子群算法BSAPSO(学习笔记_03)
  19. Java获取下周、本周、上月、本月第一天最后一天
  20. 理解逻辑回归中的后验概率和损失函数

热门文章

  1. [Unity]动态人物头像
  2. OpenMV感光元件参数设置
  3. 机器学习算法基础之使用python代码
  4. Gnosis Safe 的使用
  5. 红外遥控器添加遥控支持方法
  6. 企业微信三方开发(三):网页授权登录
  7. zxing集成到Android Studio中实现二维码扫一扫功能
  8. 如何查看java对象所占内存大小
  9. 底层放弃教育,中产过度焦虑,上层不玩中国高考
  10. CAD教程:CAD软件中CAD布尔运算命令怎么用?