快速上手之 C#操作WORD对象模型
想当年省计算机一级考了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