2013-04-08 3 views
1

Есть ли способ программирования MS Word для отображения точек в тексте, где происходит изменение стиля символа?Ищите изменения стиля в Word

Я программно пытаюсь проанализировать абзац, чтобы получить все смежные блоки текста, имеющие один и тот же стиль - другими словами, разделить абзац в тех точках, где изменяется стиль текста. В настоящий момент я делаю это, чтобы взять каждого персонажа и сравнить его стиль с предыдущим символом - если имя стиля отличается, я знаю, что я нашел точку, чтобы разделить результаты на. Это работает, но ужасно неэффективно (для каждого персонажа вам нужно выполнить полное сравнение стиля имени стиля). Мне интересно, есть ли способ в объектной модели Word решить эту проблему без сравнения каждого символа?

Примерный код, который я использую сейчас (это код C#: я использую COM Interop против Word 2003, но я был бы в равной степени счастлив с решением в VBA, так как однажды я в принципе знаю, как сделать это, преобразование в C# должно быть легко.)

// used to store the results as we go 
StringBuilder currentText = new StringBuilder(); 
string currentStyle = null; 

// range contains the Range I want to split up 
foreach (Range charRng in range.Characters) 
{ 
    string style = charRng.get_Style().NameLocal; 
    if (style == currentStyle) 
    { 
     currentText.Append(charRng.Text); 
    } 
    else 
    { 
       AddTextBlockToMyResults(currentStyle, currentText.ToString()); 
     currentText = new StringBuilder(charRng.Text); 
     currentStyle = style; 
    } 
} 
AddTextBlockToMyResults(currentStyle, currentText.ToString()); 

ответ

2

Какая версия (ы) Управления были использованы для создания документации Word?

Если это Office 2007 или более поздняя версия (или вы можете конвертировать документы в этот формат), то офисный документ на самом деле является просто архивом .zip. Если открыть файл .docx с архиватором WinRAR, как вы увидите, что он имеет структуру каталогов, как:

_rels 
customXml 
docProps 
word 
|_ document.xml 

Это document.xml является Open Office XML файл, который содержит весь текст и ссылки на стили в вашем Word doc. Бьюсь об заклад, вы можете разобрать этот XML намного быстрее, чем делать то, что вы делаете сейчас.

+0

Хитрость :-) Да, с точки зрения производительности, которая была бы более эффективной. Много работы, хотя я должен был бы понять, а затем написать код для анализа document.xml, поэтому было бы предпочтительным решение, использующее объектную модель Word. Я рассмотрю вашу идею как последнее средство. – PhantomDrummer

+0

Ну, я понимаю вашу сдержанность, чтобы переключать пути ... но я не думаю, что это было бы так плохо, как все это. Вам действительно не нужно было бы понимать полный XSD или знать, что означают все теги - до тех пор, пока вы можете выбрать, какой тег (ы) означал изменение стиля. Бьюсь об заклад, вы можете макет фиктивного документа с несколькими изменениями стиля и посмотреть, как Word их реализует. В этот момент вы просто ищете теги, которые вас волнуют, и, вероятно, могут игнорировать остальные. Во всяком случае, удача :-), уровень COM Office не самый дружелюбный. – GojiraDeMonstah

+0

Скорее посмотрите на формат docx, я согласен с вами. Слой Office COM не дал мне никаких проблем (я думаю, в основном из-за отсутствия достойной документации), тогда как document.xml-файл почти самодокументирован. Наверное, стоит того, чтобы попытаться спуститься по этому пути. – PhantomDrummer