当前位置:首页 > Windows程序 > 正文

快速上手之 C#操作WORD对象模型

2021-03-27 Windows程序

想当年省计算机一级考了60飘过,暗自窃喜。

如今要考虑它是怎么给我判了个60分。

当年不会做Excel题,OUTLOOK题,IE题。

如今要搞清楚它判分的逻辑是什么。

两年如此大的差距,晕晕的开始没有头绪,后来...


矫情一番,收。什么是WORD对象模型?


初步认识:


word主要有五大对象,Application,Document,Selection,Bookmarks,Range。


Application:代表Microsoft Word应用程序本身,是所有对象的基类,对word环境的控制是通过Application的一些属性和方法。

Document:代表一个word文档,就是点击你桌面上右击,新建一个word文档,那个实例化出来的对象就是document对象。因为是Application的子类,所以可以通过Application对象的activedocument属性获取当前文档对象。

Selection:代表当前选中的区域(高亮),没有选中区域时代表光标点。

Bookmarks:书签。

Range(很常用):代表一块区域,与Selection类似,不过一般不可见

  1>包含一个起始位置和一个结束位置
  2>它可以包含光标点,一段文本或者整个文档
  3>它包含空格,tab以及paragraph marks
  4>它可以是当前选中的区域,当然也可以不是当前选中区域
  5>它被动态创建
  6>当你在一个Range的末尾插入文本,这将扩展该Range



技术分享




找到技巧:


  我用了一天的时间查了很多资料关于VBA,关于C# Winform开发word对象。发现这些知识很散很零碎,为什么这么说呢?首先word对象很多,譬如一个文档,一个段落,一个可选区域等等。一个对象又有N多的属性和方法。查了一天的资料,除了震惊它的强大之外,没别的想法。。冷静过后,觉得,大海捞针一般去查去找。不如把这一年的word操作题分类汇总,包括所有的操作题分类汇总。

  

  于是我们做了以下的工作:

1、将所有题进行横向对比,找到固定题型,将一个大问题word操作,使它的粒度变小。

2、分到任务的人,主要去找这个东西是word下的什么对象,找它对应的属性和方法。

3、判分的关键点在于最后结果,至于过程不重要。例如:不管他是怎么移动的,总之最后结果是A存在,B不存在就好。


实例操作:


1、第一步引用word对象。在扩展中选择Microsoft.Office.Interop.Word。


技术分享


在类文件中添加应用如下:

using Word = Microsoft.Office.Interop.Word; using System.IO; using System.Reflection;
2、找到你要操作的对象,和想查找该对象的某个属性。


例1:

  题目是将全文的“.”替换为“。”   因为我们要最后的结果,我就想到用IndexOf()去查找“.”的位置,如果找不到它的位置返回为-1,就证明没有这个符号。

首先对复用的语句可以写成一个Wordhelper:

/// <summary> /// 读取 word文档 返回内容 /// </summary> /// <param name="path"></param> /// <returns></returns> public static string GetWordContent(string path) { try { Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application(); Type wordType = app.GetType(); Microsoft.Office.Interop.Word.Document doc = null; object unknow = Type.Missing; app.Visible = false; object file = path; doc = app.Documents.Add (ref file, ref unknow, ref unknow, ref unknow); int count = doc.Paragraphs.Count; StringBuilder sb = new StringBuilder(); for (int i = 1; i <= count; i++) { sb.Append(doc.Paragraphs[i].Range.Text.Trim()); } //关闭word进程 doc.Close (ref unknow, ref unknow, ref unknow); wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, app, null); doc = null; app = null; //垃圾回收 GC.Collect(); GC.WaitForPendingFinalizers(); string temp = sb.ToString(); return temp; } catch { return ""; } }

这个方法,只有你传路径给它,它就可以返回给你文档中的内容。我们就可以去查找文档中的文字了。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68633.html