Skip to main content
 首页 » 编程设计

c#之使用 Word 互操作查找具有特定格式的文本范围

2024年08月12日48lyj

我有一个 MS Word 加载项,需要仅根据其格式从一系列文本中提取文本:特别是在我的情况下,如果文本带有下划线或删除线,则字符/单词的范围是需要找到带下划线或删除线的部分,以便我可以跟踪它们。

我的第一个想法是使用 Range.Find,即 outlined here ,但是当我不知道要查找的字符串是什么时,这将不起作用:

var rng = doc.Range(someStartRange, someEndRange); 
 
rng.Find.Forward = true; 
rng.Find.Format = true; 
// I removed this line in favor of putting it inside Execute() 
//rng.Find.Text = ""; 
 
rng.Find.Font.Underline = WdUnderline.wdUnderlineSingle; 
 
// this works 
rng.Find.Execute(""); 
 
int foundNumber = 0; 
 
while (rng.Find.Found) 
{ 
    foundNumber++; 
    // this needed to be added as well, as per the link above 
    rng.Find.Execute(""); 
} 
 
MessageBox.Show("Underlined strings found: " + foundNumber.ToString()); 

我很乐意自己解析文本,但我不确定如何在知道格式的情况下执行此操作。提前感谢您的任何想法。

编辑:

我更改了我的代码以修复查找下划线问题,并且随着该更改 while 循环永远不会终止。更具体地说,rng.Find.Found 查找带下划线的文本,但它会一遍又一遍地查找相同的文本,并且永远不会终止。

编辑 2: 一旦我在 while 循环中添加了额外的 Execute() 调用,查找功能就会按需运行。

请您参考如下方法:

你需要

rng.Find.Font.Underline  = wdUnderline.wdUnderlineSingle; 

(此时您正在为指定的 rng 设置格式,而不是为 Find 设置格式)