如何使用VBA或.net 2005突出显示特定字体的句子
本文关键字:显示 字体 句子 VBA 何使用 net 2005 | 更新日期: 2023-09-27 18:27:12
我在MSWord 2007和VBA以及Visual Studio 2005中工作。在我的MSWord文档中包含不同的字体,我想突出显示特定字体的文本。就像用Arial写的一句话,那么我想单独强调这句话。
首先,您希望找到具有给定字体的所有文本部分。在MSWord 2007中使用的docx
格式中,具有公共属性的文本部分称为run
,由<w:r>
标记指定(ECMA-376第33页)。运行丰富的格式(包括其字体)存储在<w:rPr>
标记中,特别是<w:rFonts>
标记中。因此,为了找到具有给定字体的文本部分,我们要查找具有适当字体信息的<w:rFonts>
标记。
<w:rFonts>
标签的格式如下(去掉了一些不相关的属性):
<w:rFonts w:ascii=”FontName”
w:cs=”FontName”
w:eastAsia=”FontName”
w:hAnsi=”FontName”/>
属性对应于不同的编码:
w:ascii
对应ASCIIw:cs
对应于需要复杂格式技术的Unicode字符w:eastAsia
对应于东亚Unicode范围内的字符w:hAnsi
对应于Unicode范围中不属于上述类别之一的任何字符
假设文档中没有任何中文、阿拉伯语或其他形式的复杂文本,则可以安全地忽略w:cs
和w:eastAsia
属性。
概括一下,我们需要找到所有具有与所需字体或换句话说<w:rFonts w:ascii="Needed Font" w:hAnsi="Needed Font">
对应的w:ascii
或w:hAnsi
属性的<w:rFonts>
。
现在,如果您不熟悉docx
格式,它实际上是由几个文件组成的包,其中包括XML文件(有关docx文档结构的更多信息)。我们可以使用System.IO.Packaging
和XML解析类来处理docx
文档,但我们从Microsoft获得了一个有用的抽象-Open XML SDK,它为我们处理docx
文件提供了一个很好的类层次结构:
- 文字处理文档
- 文件
- 车身
- 段落
- Run
- RunProperties
- RunFonts
一旦我们进入RunFonts
类,我们就有两个与我们相关的属性——RunFonts.Ascii
和RunFonts.HighAnsi
。我们如何到达那里?以下代码片段演示:
using System;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace WordProcessingEx
{
public class Program
{
public static void Main(string[] args)
{
string fileName = /*obtain path to file here*/;
using (WordprocessingDocument myDocument = WordprocessingDocument.Open(fileName, true))
{
// Get all paragraphs
var p = myDocument.MainDocumentPart.Document.Body.Elements<Paragraph>().First();
var r = from para in p
from run in para.Elements<Run>()
where run.RunProperties.RunFonts.ASCII ="NeededFont" || run.RunProperties.RunFonts.HighAnsi = "NeededFont"
select run;
}
}
}
}
现在我们已经用适当的字体进行了所有的运行,我们需要突出显示它们。这是通过<w:highlight>
标签及其w:val
属性来实现的。例如-<w:highlight w:val="yellow"/>
。
以下代码片段演示:
foreach (var run in r)
{
run.RunProperties.Highlight.SetAttribute(new OpenXmlAttribute("w:val", null, "yellow"));
}
(这出现在上面的using
块中,就在LINQ查询之后)
在这一切之后,我们结束了。一旦执行离开using
块,使用所选字体的每次运行都会高亮显示。