powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сравнение колонтитулов
1 сообщений из 1, страница 1 из 1
Сравнение колонтитулов
    #39991850
iMerlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех!

Столкнулся с не совсем понятным для меня поведением Word.
Пишу набор инструментов для обработки документов. В частности одна из задач: на вход поступет несколько документов, на выходе это все склеивается в один. Делается это вручную, но после склейки хочется провести некоторую пост обработку, в частности убрать лишние разделы, так как авторы отдельных документов не специалисты в оформленни текстов и зачастую вставляют вообще ненужные разрывы разделов.
Написал цикл, бегущий по разделам и сравнивающий параметры текущего и предыдущего разделов: размер и ориентация страниц, количество колонок и колонтитулы. Если все параметры совпадают - разделы объединяются.

Для начала как проверяю идентичность колонтитулов: отдельно headers и footers, если в разделе отдельные колонтитулы чет/нечет или первой страницы, то их отдельно. Проверяю три параметра: текст, поля (fields) по количеству/типу/формуле поля и shapes по тексту и полям (fields). Это все связано с тем, что при оформлении документа в колонтитулах часто присутствуют shape с текстом, номерами страниц и т.д.
Функции сравнения передаю range (CompareRanges(s.Headers(wdHeaderFooterPrimary).Range, s_.Headers(wdHeaderFooterPrimary).Range)
CompareRanges сравнивает текст (там все понятно: If (VBA.StrComp(r1.Text, r2.Text, vbBinaryCompare) <> 0)
и передает эти range функциям сравнения полей и рамок.
Сравнение полей просто попарно по списку сравниваются тип и, при совпадении, f.code.
Фигуры загоняются в коллекции и двумя вложенными циклами ищутся совпадения по тексту и полям, и, при совпадении, удаляются из коллекций. Если в конце коллекции пусты - значит наборы совпадают. Такая сложность из-за того, что порядок рамок может быть изменен в разных разделах.
И вроде все хорошо, все прекрасно отработало на тестовом документе, но случайно напал на очень неприятную и непонятную мне вещь.

В тестовом документе (с порядка 40 разделами) сделал в четырех разделах рамки с текстом.
Затем поставил курсор в один из этих разделов и сделал запрос в immediate:

?selection.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.Count

К моему удивлению вернулось значение 4. И в каком бы разделе я это не делал, результат был тот же самый. Перебор текстов показал, что в Headers хранятся все рамки всех разделов! Мало того, в колонтитуле четных, который вообще не задействован ни в одном разделе, и в footers, тоже не используемом, тот же самый список! То есть, получается, все танцы с бубнами с проверкой списка рамок в моей программе работает неправильно, список фигур всегда один и тот же во всех разделах и тест всегда будет выдавать положительный результат проверки!

Вопрос: как мне получить рамки только текущего раздела?
И, может быть, правильнее задать такой вопрос: как ПРАВИЛЬНО сравнить на полное совпадение два колонтитула разных разделов одного документа, учитывая возможное наличие текстов с полями (fields) в рамках?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сравнение колонтитулов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]