Как пропустить таблицы, когда я использую range.find для поиска по всему документу, используя vsto? - PullRequest
0 голосов
/ 30 мая 2019

Теперь я хочу пройти весь текстовый документ через range.find.Мне нужно пропустить таблицы в документе, а затем выполнить автоматическую верстку пройденных символов, но я не нашел способа исключить таблицы.Есть ли способ решить эту проблему?

Информация [WdInformation.wdWithInTable]

  Range sRange=Globals.ThisAddIn.Application.Selection.Range
  Range fR = wordDoc.Range(sRange.Start, sRange.End);
                fR.Find.ClearFormatting();
                fR.Find.Text = "[a-zA-Z0-9]{1,}";
                fR.Find.Replacement.ClearFormatting();
                fR.Find.MatchWildcards = true;

                //fR.Find.Wrap = WdFindWrap.wdFindContinue;
                fR.Find.Forward = true;

                object missing = Type.Missing;
                fR.Find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing);

                while (fR.Find.Found)
                {
                    int rs = fR.Start;
                    int re = fR.End;

                    if (rs > sRange.End || re < sRange.Start) break;
                    //if (fR.Information[WdInformation.wdWithInTable])
                    //    continue;

                    fR.Font.Size = (float)tsd.content.enfont.size;
                    fR.Font.Name = tsd.content.enfont.face;
                    fR.Find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing);
                }

Надеюсь, что данные верстки никак не повлияют на таблицу, но они бесполезны.

1 Ответ

1 голос
/ 03 июня 2019

Можно использовать Word.WdInformation.wdWithInTable, чтобы определить, находится ли Range или Selection в таблице.

В мире Word COM это свойство с именем Information, принимающее различные параметрыи возвращает различные виды информации (логическое, целое и т. д.) Поскольку C # не поддерживает свойства, которые принимают параметры, это преобразуется в метод get_Information в PIA.Кроме того, поскольку возвращаемые значения не имеют одинаковый тип данных, метод возвращает object, что означает, что возвращаемое значение должно быть явно приведено.

Следующий фрагмент кода, основанный на коде ввопрос, показывает, как проверить, находится ли найденный Range в таблице.

while (fR.Find.Found && !(bool)fR.get_Information(Word.WdInformation.wdWithInTable))
{
    Debug.Print("Not in a table");
}
...