Find a range of text with specific formatting with Word interop

妖精的绣舞 提交于 2020-02-02 12:51:48

问题


I have a MS Word add-in that needs to extract text from a range of text based solely on its formatting: in my case in particular, if the text is underlined or struck through, the range of characters/words that are underlined or struck through need to be found so that I can keep track of them.

My first idea was to use Range.Find, as is outlined here, but that won't work when I have no idea what the string is that I'm looking for:

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());

I would happily parse the text myself, but am not sure how to do this while still knowing the formatting. Thanks in advance for any ideas.

EDIT:

I changed my code to fix the find underline issue, and with that change the while loop never terminates. More specifically, rng.Find.Found finds the underlined text, but it finds the same text over and over, and never terminates.

EDIT 2: Once I added the additional Execute() call inside the while loop, the find functioned as needed.


回答1:


You need

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

(At the moment you are setting the formatting for the specified rng, rather than the formatting for the Find)



来源:https://stackoverflow.com/questions/27072679/find-a-range-of-text-with-specific-formatting-with-word-interop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!