Я написал код, чтобы попытаться добиться этого:
Код: Выделить всё
private void formatText() {
Microsoft.Office.Interop.Word.Paragraphs paragraphs = Globals.ThisAddIn.Application.ActiveDocument.Paragraphs;
Boolean isPreviousLineEmpty = false;
Boolean isLastLine = true;
for (int i = paragraphs.Count - 1; i > 0; i--) {
Microsoft.Office.Interop.Word.Paragraph paragraph = paragraphs[i];
if (paragraph.Range.Text.Trim().Equals("")) {
if (isLastLine) {
paragraph.Range.Delete();
continue;
}
if (isPreviousLineEmpty) {
paragraph.Range.Delete(); //This is the line where the error happens
}
isPreviousLineEmpty = true;
continue;
}
if (isLastLine) {
paragraph.Range.Text = paragraph.Range.Text.TrimEnd();
isLastLine = false;
}
isPreviousLineEmpty = false;
}
}
System.Runtime.InteropServices.COMException: «Невозможно изменить диапазон».
Причина: в оглавлении есть белая линия, которую мой код пытается удалить, но он не может. Я искал в документации/Интернете и пробовал все, что мог придумать, чтобы предотвратить запуск моего кода в строках TOC, но ничего не помогло.
Мне нужен способ узнать, что я могу пропустить эту строку, потому что мне не нужно удалять пустые строки внутри TOC.
На данный момент я могу обернуть конкретную строку, которая выполняет удаление, с помощью Try/Catch блокировать, но я не думаю, что это лучшее решение (поскольку я могу оставить другие ошибки незамеченными, это просто глушитель).
Кто-нибудь знает правильный подход к этому случаю?
ОБНОВЛЕНИЕ:
Следуя комментарию Freeflow, я заменил весь свой код метода следующим:
Код: Выделить всё
private void formatText() {
Microsoft.Office.Interop.Word.Find find = Globals.ThisAddIn.Application.ActiveDocument.Range().Find;
Microsoft.Office.Interop.Word.Paragraphs paragraphs = Globals.ThisAddIn.Application.ActiveDocument.Paragraphs;
Boolean operationResult = true;
//Remove blank lines at the end of the document
for (int i = paragraphs.Count - 1; i > 0; i--) {
Microsoft.Office.Interop.Word.Paragraph paragraph = paragraphs[i];
if (paragraph.Range.Text.Trim().Equals("")) {
paragraph.Range.Delete();
continue;
}
paragraph.Range.Text = paragraph.Range.Text.TrimEnd();
break;
}
//Remove blank lines between paragraphs
while (operationResult) {
operationResult = find.Execute("^p^p^p", false, false, false, false, false, false, null, null, "^p^p",
Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll);
}
}
Спасибо за ваш комментарий. Если вы преобразуете его в ответ, я отмечу его как принятый.
Подробнее здесь: https://stackoverflow.com/questions/585 ... word-addin
Мобильная версия