C#实现Office自动判分方法总结——Word篇

C#操作Office方法总结——Word篇(持续更新)

  • 1. 实例化word对象
  • 2. 释放word对象
  • 3. Range对象介绍
    • 3.1 简介
    • 3.2 获取某一段的Range
    • 3.3 获取特定部分的Range
  • 4. 判分方法大全
    • 4.1 封面判断
    • 4.2 字体判断
    • 4.3 段落格式判断(首行缩进与行间距等)
    • 4.4 边框判断
    • 4.5 底纹判断
    • 4.6 超链接判断
    • 4.7 批注判断
    • 4.8 水印判断
  • 5. 未完待续

1. 实例化word对象

  • 首先添加库依赖
using MSWord = Microsoft.Office.Interop.Word;//word的操作方法库
using System.Reflection;//其中的Missing.Value类型可以作为函数参数的默认值传进去
  • 实例化Application对象
MSWord.Application wordApp = new MSWord.Application();
//如果是ApplicationClass(),也是一样的,但需要修改Microsoft.Office.Interop.Word引用的属性中潜入互操作类型改为False
  • 实例化Documents对象
MSWord.Document wordDoc = wordApp.Documents.Open(fileName, Missing.Value, true);
//使用wordApp.Documents.Add(...)也可以,用法类似
//其实该函数的参数很多,在VS下鼠标放上去就可以显示出来
//这里的第一个参数fileName表示word文件路径,第三个参数true,表示readOnly=ture,即以只读方式打开,防止出现读写冲突

2. 释放word对象

  • 关闭Documents对象
wordDoc.Close(false); //第一个参数为false表示退出时不保存更改。
  • 退出Application对象
wordApp.Quit(false); //第一个参数为false表示退出时不保存更改

3. Range对象介绍

3.1 简介

  • Range对象相当于是被选中的内容部分,我们知道像office中诸如字号、字体、段落、边框等属性的修改首先都是要选中该部分内容的,所以Range对象的获取在C#操纵office中是极其重要的,我们可以通过改变Range的相关属性实现对文本格式的更改,也可以通过获取Range的相关属性实现对文本格式的读取。
  • 声明Range对象的方法如下:
MSWord.Range range = null;

3.2 获取某一段的Range

通过MSWord.Ducument对象的Paragraphs属性获取,返回Paragraph的数组,Paragraphs对象的Count属性可以返回数组的长度。

MSWord.Paragraphs paras = wordDoc.Paragraphs;
MSWord.Paragraph []para = new MSWord.Paragraph[100];
for (i = 1; i <= paras.Count; i++) para[i-1] = para[i];

注意: 在这里,word库里面封装好的对象和属性,数组下标一般都是从1开始的,取0会报错
然后通过para[i].Range即可获取到某一段的Range,同时可以通过在调试的时候查看para[i].Range.Text的内容判断当前为哪一段。
但是很多时候,仅仅获取到一个段落的Range是远远不够的,我们需要更精确的选中某几个字的Range,同样有方法获取,请继续看。

3.3 获取特定部分的Range

我们知道在office中都是可以通过Ctrl + F实现查找功能的,而且一旦找到,会自动选中该找到的部分,所以我们同样可以通过C#调用查找功能,实现对Range的精确定位。

MSWord.Range objRange = null;
MSWord.Find findObj = null;
objRange = wordDoc.Range();//设置查找范围,这里选用的是全文范围,也可以通过para[i].Range使得在指定段落范围内查找
findObj = objRange.Find;//获取该范围的查找器对象
findObj.Text = "你需要查找的文本";
bool finded = findObj.Execute();//执行查找,返回bool类型表示是否查找成功,若成功则返回True
if( finded )//如果查找成功
{
	......
}

执行完Execute()方法后,objRange将自动设置为找到的部分,可以通过objRange.Text查看是否查找正确(查找将返回找到的第一个匹配结果)

4. 判分方法大全

4.1 封面判断

这里没有找到一个很好的方式来判断是否插入了一个正确的封面,但插入封面其实就是插入了一个有封面内容的page,封面样式不同,其内容也是不同的,所以可以直接取出封面部分的字符串来判断是否添加正确的封面。
例:

string wordText = wordDoc.Content.Text;
string cover = wordText.Substring(0, wordText.IndexOf("创业成功"));
if (cover.Equals("正确的字符串内容和格式")) grade += 1.0f;//操作正确,加分

4.2 字体判断

通过MSWord.Range对象的Font对象获取字体的相关属性。

通过MSWord.Range.Font.×××获取

属性名 返回类型 含义
Name string 获取字体名称,如“宋体”、“楷体”等
Size float 获取字体大小
Bold int 获取字体是否加粗,若加粗则值为-1
Italic int 获取字体是否倾斜,若倾斜则值为-1
Color MSWord.WdColor 获取字体颜色
Underline MSWord.WdUnderline 获取字体下划线类型

例:

if (range.Font.Color == MSWord.WdColor.wdColorRed &&
    range.Font.Bold == -1 && objRange.Font.Italic == -1 && 
    range.Font.Underline == MSWord.WdUnderline.wdUnderlineSingle && 
    range.Font.Name == "黑体") grade += 1.0f;

4.3 段落格式判断(首行缩进与行间距等)

通过MSWord.Range对象的ParagraphFormat对象获取段落格式的相关属性。

通过MSWord.Range.ParagraphFormat.×××获取

属性名 返回类型 含义
CharacterUnitFirstLineIndent float 获取首行缩进字符数
LineSpacing float 获取行间距
Alignment MSWord.WdParagraphAlignment 获取段落对齐方式

例:

if (range.ParagraphFormat.CharacterUnitFirstLineIndent == 2) grade += 0.5f;
if (range.ParagraphFormat.LineSpacing == 37.2f) grade += 0.5f;
if (range.ParagraphFormat.Alignment == MSWord.WdParagraphAlignment.wdAlignParagraphCenter) 
	grade += 0.5f;

4.4 边框判断

通过MSWord.Range对象的Borders对象获取边框的相关属性。

通过MSWord.Range.Borders.×××获取

属性名 返回类型 含义
InsideColor MSWord.WdColor 获取内边框的颜色
OutsideColor MSWord.WdColor 获取外边框的颜色
InsideLineStyle MSWord.WdLineStyle 获取内边框的线条类型
OutsideLineStyle MSWord.WdLineStyle 获取外边框的线条类型
InsideLineWidth MSWord.WdLineWidth 获取内边框的线宽
OutsideLineWidth MSWord.WdLineWidth 获取外边框的线宽

例:

if (range.Borders.OutsideLineStyle == MSWord.WdLineStyle.wdLineStyleDouble && 
     range.Borders.OutsideLineWidth == MSWord.WdLineWidth.wdLineWidth150pt ) 
     grade += 0.5f;
if (range.Borders.OutsideColor == MSWord.WdColor.wdColorRed) grade += 0.5f;

4.5 底纹判断

通过MSWord.Range对象的Shading对象获取边框的相关属性。

通过MSWord.Range.Shading.×××获取

属性名 返回类型 含义
Texture MSWord.WdTextureIndex 获取底纹的颜色深度
ForegroundPatternColor MSWord.WdColor 获取底纹的前景颜色
BackgroundPatternColor MSWord.WdColor 获取底纹的后景颜色

例:

if (range.Shading.Texture == MSWord.WdTextureIndex.wdTexture10Percent &&
   range.Shading.ForegroundPatternColor == MSWord.WdColor.wdColorGreen && 
   range.Shading.BackgroundPatternColor == MSWord.WdColor.wdColorGreen) 
   grade += 1.0f;

4.6 超链接判断

通过MSWord.Range对象的Hyperlinks[i]对象获取超链接的相关属性,i表示第i条超链接,如果只有一个超链接,i=1即可。
同时还可以通过Hyperlinks对象的Count属性获取Range中超链接的总个数。

通过MSWord.Range.Hyperlinks[i].×××获取

属性名 返回类型 含义
Address string 获取超链接的地址字符串
TextToDisplay string 获取被链接文本

例:

if (range.Hyperlinks.Count > 0)
{
	if (range.Hyperlinks[1].Address.Contains("www.×××.×××.cn") 
	&& range.Hyperlinks[1].TextToDisplay.Equals("××××")) grade += 1.0f;
}

4.7 批注判断

通过MSWord.Range对象的Comments[i]对象获取边框的相关属性,i表示第i条批注,如果只有一条批注,i=1即可
同时还可以通过Comments对象的Count属性获取Range中批注的总条数。

通过MSWord.Range.Comments[i].×××获取

属性名 返回类型 含义
Scope.Text string 获取被批注的文本内容
Range.Text string 获取批注内容

例:

if (range.Comments.Count > 1)
{
    MSWord.Comment comment = range.Comments[1];
    if (comment.Scope.Text == "缩略时代" && comment.Range.Text == "来自中国信息网") 
    grade += 1.0f;
}

4.8 水印判断

通过MSWord.Document.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes[1]获取水印的相关属性

通过MSWord.Document.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes[1]].×××获取

属性名 返回类型 含义
TextEffect.Text string 水印内容
TextEffect.FontName string 水印字体名称
TextEffect.FontSize float 水印字体大小
Fill.Transparency float 水印透明度,0.5表示半透明
Fill.ForeColor.Name string 水印字体的前景颜色
Fill.BackColor.Name string 水印字体的背景颜色
Fill.ForeColor.RGB int 水印字体的前景颜色rgb值,rgb = B×2552+G×2551+R×2550
Fill.BackColor.RGB int 水印字体的背景颜色rgb值,rgb = B×2552+G×2551+R×2550
Rotation float 旋转角度,设置为斜式的话值为315.0f

例:

if(wordDoc.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.Count > 0)
{            
    grade += 0.5f;
    MSWord.Shape shape = wordDoc.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes[1];
    if (shape.TextEffect.Text.Equals("计算机基础")) grade += 0.5f;
    if (shape.TextEffect.FontName == "楷体") grade += 0.5f;
    if (shape.TextEffect.FontSize == 44.0f) grade += 0.5f;
    if (shape.Fill.Transparency == 0.5 && shape.Fill.ForeColor.RGB == 255) grade += 0.5f;
    if (shape.Rotation == 315) grade += 0.5f;
}

5. 未完待续

你可能感兴趣的:(C#操作Office,C#,Office,Word,自动判分)