Я реализую функцию, выполняемую ниже двух задач. У пользователя есть возможность запустить оба или запустить только одну задачу (обрабатывать через флажки). < /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
Замените несколько мест на одно пространство, используя Word Find заменить с помощью трека ⇐ C#
Место общения программистов C#
1755085240
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>
Ввод: это параграф с несколькими пространствами. конец?
Заранее спасибо.
Подробнее здесь: [url]https://stackoverflow.com/questions/79734221/replace-multiple-spaces-with-single-space-using-word-find-replace-with-track-cha[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия