Есть ли способ программирования 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());
Хитрость :-) Да, с точки зрения производительности, которая была бы более эффективной. Много работы, хотя я должен был бы понять, а затем написать код для анализа document.xml, поэтому было бы предпочтительным решение, использующее объектную модель Word. Я рассмотрю вашу идею как последнее средство. – PhantomDrummer
Ну, я понимаю вашу сдержанность, чтобы переключать пути ... но я не думаю, что это было бы так плохо, как все это. Вам действительно не нужно было бы понимать полный XSD или знать, что означают все теги - до тех пор, пока вы можете выбрать, какой тег (ы) означал изменение стиля. Бьюсь об заклад, вы можете макет фиктивного документа с несколькими изменениями стиля и посмотреть, как Word их реализует. В этот момент вы просто ищете теги, которые вас волнуют, и, вероятно, могут игнорировать остальные. Во всяком случае, удача :-), уровень COM Office не самый дружелюбный. – GojiraDeMonstah
Скорее посмотрите на формат docx, я согласен с вами. Слой Office COM не дал мне никаких проблем (я думаю, в основном из-за отсутствия достойной документации), тогда как document.xml-файл почти самодокументирован. Наверное, стоит того, чтобы попытаться спуститься по этому пути. – PhantomDrummer