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

标签 c# ms-word office-interop

我有一个 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的格式)

关于c# - 使用 Word 互操作查找具有特定格式的文本范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072679/

相关文章:

c# - ASP.NET 身份声明

c# - 如何使用 Microsoft.Office.Interop.Word 在某些 Word 文档中查找和修改文本框?

vba - 如何强制下划线成为我的 Word 宏中单词的一部分?

java - 使用 Apache POI 在 word 文档中创建制表符空间

c# - C# 和 VBA 之间的通信

vb.net - 在没有互操作的情况下将 xls 转换为 xlsx

c# - 当 Resharper 显示 'Failed to modify Documents' 时,我需要一个解决方法。有谁知道它为什么这样做以及如何解决它?

javascript - 使用预先存在的访问 token 通过 ASP.NET 创建 YouTube 服务

vba - 无法在 Word VBA 中使用递归 Range.Find

office-interop - 替换 PowerPoint 中的某些文本