2016-11-11 6 views
0

Контекст: Автоматизация MS Word с interop, C#, документ с 2000 разделами и 3 заголовками.Word Interop - верхние и нижние колонтитулы процесса только один раз

Проблема: эффективная обработка заголовков и колонтитулы (например, поиск текста & заменить в заголовке)

Кажется, способ обработки заголовков (или колонтитулы) в слове что-то вроде этого:

foreach (Microsoft.Office.Interop.Word.Section section in theDoc.Sections) 
{ 
    foreach (Microsoft.Office.Interop.Word.HeaderFooter header in section.Headers) 
    { 
     //processRange(theDoc, header.Range); 
    } 
} 

Проблема петля будет работать тысячу раз для этого документа я задеть, даже если он имеет только один заголовок. Поскольку раздел может иметь разные заголовки, очевидно, я не могу просто остановиться после первого попадания на заголовок. Но в данном случае, это задача, так как есть только 3 заголовки, а не 6000.

Я думал о том, что делает заголовок уникальным, так что я могу держать ключи в HashSet и просто пропустить, если уже есть.

Что это за ключ, если он есть? range.Start + range.End + range.StoryType (диапазон headerfooter)? range.text? Что-то другое ?

Возможно, существует лучший подход, чтобы избежать избыточности?

Благодарим за помощь.

-Cristian

ответ

0

Я закончил с гибридным решением, в основном использует секции-режим, если есть только один или несколько разделов или использовать story_range-режим, если есть много разделов. Основываясь на сообщениях в Интернете, кажется, что режим разделов на самом деле быстрее, если у вас есть только один раздел.

раздел раздел описано в вопросе. Режим диапазона история описана в этих постах:

https://wls.wwco.com/blog/2010/07/03/find-and-replace-in-word-using-c-net/ http://word.mvps.org/faqs/customization/ReplaceAnywhere.htm

Смежные вопросы