![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 26.05.2015
Сообщений: 6
|
![]()
Привет.
Есть тексты набранные в ворде. Много локального форматирования, которое зачастую весьма разнообразно. Нужно всё это преобразовать в символьные стили. Я думал примерно так (не судите строго — не программист): 1. Устанавливаем курсор в начале в образце текста который считаем базовым и запускаем макрос. 2. Макрос находит в тексте первое отличие форматирование от базового и заносит его в массив используемых форматирований, создаёт стиль, назначает. 3. Перемещается к окончанию этого отличия в форматировании и начинает искать следующее отличие. 4. Находит, проверяет есть ли уже такое в массиве используемых форматирований, если есть — назначает соответствующий стиль и идёт на 3, если нет — записывает новый формат в массив, создаёт стиль, назначает и идёт на 3. И так до конца текста. Столкнулся с тем, что переменными типа font затруднительно оперировать как переменными базовых типов. Т.е. сравнивать, присваивать (значение) и т.п. Можно это делать как-то удобно? Т.е., например, мне надо записать в элемент массива типа font текущее selection.font. Как это сделать? Как потом проверить равенство/неравенство элементов массива и selection.font? Как расширит selection вправо вплоть до начала фрагмента текста с иным форматированием? Вообще мой подход в целом верен или это можно сделать более быстро/просто? После того как всё это написал немного поэксперементировал и попробовал сделать так: Код:
Ожидалось, что будет работать так (по сторокам): 1-2. Очищаем поиск. 3. Формату поиска задаём формат аналогичный формату выделенного фрагмента. 4-5. Перемещаем selection в начало документа. 6. Ищем фрагмент с форматированием совпадающим с тем, что было в начале выделено. Не ищет. Если открыть потом Ctrl+H, то видно, что формат текста настроен. В ручную (Ctrl+H + "Найти далее") тоже не ищет. Если искать не всё форматирование, а только, например болд/неболд, то всё работает. Что не так, где ошибка? Спасибо. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]()
Почитайте про опцию Word "Вести учет форматирования", она как раз и служит для создания стилей автоматом: Ссылка
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
|
![]() |
![]() |
![]() |
#3 | |
Регистрация: 26.05.2015
Сообщений: 6
|
![]() Цитата:
![]() Локальное форматирование (подчеркивание) есть в списке стилей, но это не стиль (нет значка стиля справа). |
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]()
Они и не создаются, а только отображаются в списке как стили. Создавать надо ручками: выбрали в списке > изменить > ОК. Этот метот быстро и надлядно показывает все форматирование, что есть в документе.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 26.05.2015
Сообщений: 6
|
![]() |
![]() |
![]() |
![]() |
#6 |
Регистрация: 26.05.2015
Сообщений: 6
|
![]()
Выяснил, что поиском (Ctrl+H) вообще невозможно задать всех свойств которые могут быть присущи тексту, например, "Selection.Font.Fill...", "Selection.Font.Glow..." и т.п. которые в форматировании текста указываются в "...Шрифт->Текстовые эффекты".
Единственное решение которое приходит мне в голову — написать пару функций одна из которых будет перебирая все свойства копировать один объект типа font в другой, а вторая таким же способом их сравнивать. Затем пользуясь ими проверять последовательно форматирование каждого символа и если оно отличается от всех обнаруженных ранее вариантов форматирования создавать новый стиль, а если совпадает с одинм из ранее обнаруженных вариантов то назначть тот стиль с которым совпадает. Всё это представляется крайне медленным и, вероятно, не оптимальным. Может быть всё таки есть более разумный подход? Задача всё та же — назначить каждому варианту локального форматированя свой стиль. |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,079
|
![]()
когда-то я делала стандарты предприятия(более 100 штук по 20-50 страниц)
---мне было проще------------ любой параграф был оформлен одним стилем, итого получилось около 40 стилей --------------------------------- но если бы мне надо было ввести формулу воды Н2О или некоторые слова сделать жирными, у меня бы ничего не получилось
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание |
![]() |
![]() |
![]() |
#8 |
Регистрация: 26.05.2015
Сообщений: 6
|
![]()
Так и не нашёл решения. Пока попробовал как написал выше — две функции, одна для сравнения, другая для копирования всех свойств. Расстраивает то, что приходится последовательно проверять форматирование каждого символа при том, что внутри ворда все эти данные уже есть: раззиповал сохранённый docx-документ. В нём — "document.xml", все отличия форматирования, естественно, начинаются с определённого тега ("<w:b/>", "<w:i/>", '<w:u w:val="single"/>' и т.п.).
Может быть можно как-то через объектную модель ворда добраться до этих данных (откуда начинается изменение формата)? |
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]() Цитата:
Код:
Код:
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Последний раз редактировалось Вождь; 03.06.2015 в 06:49. |
|
![]() |
![]() |
![]() |
#10 |
Регистрация: 26.05.2015
Сообщений: 6
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
СТроковые стили | ts-alan | HTML и CSS | 3 | 10.10.2013 16:14 |
Локальное подключение | Fermervk | Помощь студентам | 2 | 30.10.2011 19:17 |
локальное и клиент-серверное приложения | simka16 | Помощь студентам | 5 | 15.01.2011 16:15 |
[WinApi, Delphi] Как перехватить локальное нажатие клавиши в Edit? | Moriarty | Win Api | 4 | 19.03.2010 16:29 |
Форматирование и стили | Я_Алешко | Microsoft Office Word | 2 | 29.10.2009 11:51 |