Слово C#.Взаимодействие Найти.Выполнить слово соответствия: true не удается

#c# #ms-word #vsto #ms-office

Вопрос:

Я использую Поиск.Выделите (), чтобы найти целое слово в документе. Но Найдите.Функция Excecute() завершается ошибкой, если findText содержит «#», «-» или «. Он находит все слова, начинающиеся или включающие findText. Также при поиске в word «поиск по всему слову» становится неактивным, если имя поиска содержит один из вышеперечисленных символов. Как можно найти.Выполнить() найти целые слова, содержащие»#», » — » или «?

Этот код также находит «#24V_ABCD», хотя для слова MatchWholeWord установлено значение true

 string name = @"#24V"; selection.Find.Execute(FindText: name, MatchCase: true, Wrap: WdFindWrap.wdFindContinue, MatchWholeWord: true);  

Комментарии:

1. Похоже, слово интерпретирует «#24V» как два слова. Таким образом, слово matchwholew игнорируется.

Ответ №1:

«?» и » — » используются в подстановочных знаках поиска в поиске слов, что приведет к сбою поиска.

Я не уверен насчет»#».

Ответ №2:

Слово подсчитывает слова особым образом. #24V_1A на самом деле состоит из 4 слов: ‘#’ ’24V’ ‘_’ ‘1A’. Поэтому поиск целого слова не удается.

Одним из решений является увеличение диапазона, найденного методом поиска.Выполнить() до тех пор, пока не будет достигнут конец слова. Затем реальное слово можно сравнить со строкой поиска. Найти.Функция Execute() должна вызываться до тех пор, пока не будет достигнут конец документа или не будет найдена строка поиска. Следующий фрагмент игнорирует #24V_1A, но находит #24V.

 string name = "#24V"; selection.Find.Execute(FindText: name, MatchCase: true, Wrap: WdFindWrap.wdFindContinue, MatchWholeWord: true);  // arbitrary value of 32 words in a word will be fine for me string[] delimiterChars = { "r", " ", ",", ";", ".", ":", "t", "!", "?", "a", "v" }; for (int j = 0; j lt; 32; j  ) {  string foundName = "";  selection.MoveRight(WdUnits.wdWord, 1, WdMovementType.wdExtend);  string text = selection.Range.Text; // debug value  string lastChar = text.Substring(text.Length - 1);  if (delimiterChars.Contains(lastChar))  {  // found end of word  foundName = text.Substring(0, text.Length - 1);   if (foundName == name)  {  break;  }  } }