Замените несколько мест на одно пространство, используя Word Find заменить с помощью трекаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Замените несколько мест на одно пространство, используя Word Find заменить с помощью трека

Сообщение Anonymous »

Я реализую функцию, выполняемую ниже двух задач. У пользователя есть возможность запустить оба или запустить только одну задачу (обрабатывать через флажки). < /P>

Задача 1: Замените несколько пространств в одно пространство на параграфе слова < /li>
Запуск 2: Начало обрезки и конечное пространство параграфа < /li>
< /ul>
Основным, что следует, это следует будет, что является набором. Изменения отслеживания.
ниже приведен код, который я реализован.public void CleanUp()
{
try {
isTrackingRevisions = wordDocument.TrackRevisions;
currentUserName = wordDocument.Application.UserName;

// Sets "Always use these values regardless of sign in to Office" feature found in File->Options->General to overide the username
this.tools.WordApp.Options.UseLocalUserInfo = true;

string userName = "MyAddIn";
if (userName.Length > 25) {
userName = userName.Substring(0, 25);
}

wordDocument.Application.UserName = userName;
wordDocument.TrackRevisions = true;

Word.Paragraph paragraph, nextParagraph;

paragraph = wordDocument.Paragraphs.Last;

while (paragraph != null) {
nextParagraph = paragraph.Previous();

if (cleanUpProperties.IsCheckedRemoveStartEndParaSpaces) {
//Remove leading space : Cannot use ReplaceSpecificText(paragraph, "^13[ ]{1,}", "^p", true); as paragraph's range doesn't contain earlier paragraphs end para mark.
RemoveLeadingSpaces(paragraph);
//Remove trailing space
ReplaceSpecificText(paragraph, "[ ]{1,}^13", "^p", true);
}

//Remove multiple spaces
if (cleanUpProperties.IsCheckedRemoveMultipleSpaces) {
ReplaceSpecificText(paragraph, "([!^32^160])([^32^160]{2,})([!^32^160])", "\\1 \\3", true);
}
}
} catch (Exception ex) {
//Handle exception
} finally {
wordDocument.TrackRevisions = isTrackingRevisions;
wordDocument.Application.UserName = this.currentUserName;
progressForm.SetStatus("Clean-up completed!!!");
}
}

private bool ReplaceSpecificText(Word.Paragraph paragraph, string searchText, string replaceText, bool matchWildCards = false)
{
try {
Word.Range range = paragraph.Range.Duplicate;

bool isFoundSearchInstance = false;

Word.Find findObject = range.Find;
findObject.ClearFormatting();
findObject.Format = false;
findObject.Text = searchText;
findObject.Replacement.ClearFormatting();
findObject.MatchWildcards = matchWildCards;
findObject.Replacement.Text = replaceText;
findObject.Wrap = WdFindWrap.wdFindStop;

// Replace all occurrences
isFoundSearchInstance = findObject.Execute(Replace: Word.WdReplace.wdReplaceAll);

return isFoundSearchInstance;
} catch (Exception e) {
return false;
}
}
< /code>
Я ранее использовал ниже способов замены нескольких пробелов на одно пространство. Оба работают, но второе решение полностью испортилось с изменениями трека. < /P>
ReplaceSpecificText(paragraph, " {2,}", " ", true);
ReplaceSpecificText(paragraph, "^w", " ");
< /code>
По мере того, как изменения трека включены, когда я запускаю как задачи 1, так и задача 2, удаление нескольких пространств оказывает влияние на начальные и конечные пространства и дает проблемы.
, поэтому я сейчас ищу функцию, чтобы заменить только несколько пространств в середине предложения. Это подстановочный знак, который я нашел. < /P>
ReplaceSpecificText(paragraph, "([!^32^160])([^32^160]{2,})([!^32^160])", "\\1 \\3", true);
< /code>
Я попробовал его в окне «Найти замену Word», и оно работало, как и ожидалось. Но это не работает при программном запуске.
Вот как он работает при запуске с моим кодом. < /P>
Ввод: это параграф с несколькими пространствами. конец?
Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -track-cha
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»