Макрос для замены Word-стилей на тэги

Программирование на Visual Basic for Applications
Goodnight
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 15.06.2004 (Вт) 17:31
Откуда: Msk

Макрос для замены Word-стилей на тэги

Сообщение Goodnight » 15.06.2004 (Вт) 19:48

Есть задача, нужно преобразовать текст из ворда, таким образом, чтобы после выполнения макроса word`овое форматирование описывалось тэгами наподобии html`ных. К примеру, в ворде: Мама мыла раму, после обработки макросом:<b>Мама </b><i>мыла</i><i><b>раму</b></i>.
Честно говоря, программист из меня не важный, хотя до сих пор макросы себе писал и без советов. Но тут я в тупике. Я даже не знаю, это сложно или нет... :( Буду признателен за любую помощь! Заранее спасибо.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.06.2004 (Ср) 3:56

А если "Сохранить в формате HTML"? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.06.2004 (Ср) 9:40

GSerg, ты хоть помнишь, В КАКОЙ HTML сохраняет Word свои файлы? Или это такой далеко идущий подкол? 8)

Goodnight
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 15.06.2004 (Вт) 17:31
Откуда: Msk

Сообщение Goodnight » 16.06.2004 (Ср) 12:14

Дело в том, что на выходе, мне нужно получить не html документ, а обычный текстовый файл, в котором стили описаны тэгами. С горем пополам сгодился бы и html, но ворд, при создании веб-документа, добавляет мету с указанием на кодировку, естесственно, 1251 и это ломает автоматизацию процесса, так как приходится лезть в каждый файл и править мету...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2004 (Ср) 13:13

Тебе какое форматирование нужно сохранять?
Если только Bold/Italic/Underline, то несложно. Можно добавить и размер шрифта и даже сам шрифт, хотя получится и хуже.

Тебе нужен совет или готовый пример?
Lasciate ogni speranza, voi ch'entrate.

Goodnight
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 15.06.2004 (Вт) 17:31
Откуда: Msk

To alibek

Сообщение Goodnight » 17.06.2004 (Чт) 12:17

В идеале Bold/Italic/Underline и шрифт...
Лучше совет, во всяком случае пока, когда сам что-то делаю лучше понимаю. :wink:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.06.2004 (Чт) 14:44

Тогда такая идея. Делишь весь текст на параграфы (коллекция Paragraphs). В каждом параграфе есть .Paragraphs(<index>).Range, Range - это текст (с оформлением и прочим).
Потом идет цикл по всем символам указанного параграфа (.Range.Characters).
Тут есть один ньюанс. Твой пример можно представить как "<b>Мама </b><i>мыла</i><i><b>раму</b></i>", а можно как "<b>Мама </b><i>мыла <b>раму</b></i>". Первый вариант проще, второй сложнее, но правильнее.
Будем исходить из того, что нормальный текст - это не полужирный, не курсив и не подчеркнутый (о шрифте пока не говорим).
Идет такой цикл:
Код: Выделить всё
'S - результат
'нормальное начертание
fBold = False
fItalic = False
S = ""
For I = 1 To .Characters.Count
  If .Characters(I).Bold <> fBold Then
    fBold = .Characters(I).Bold
    S = S & IIf(fBold, "<B>", "</B>")
  End If
  If .Characters(I).Italic <> fItalic Then
    fItalic = .Characters(I).Italic
    S = S & IIf(fItalic, "<I>", "</I>")
  End If
  S = S & .Characters(I)
Next I


Что-то типа такого
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.06.2004 (Чт) 15:23

Кстати, вот и первая поправка. Закрывающие тэги надо ставить после символа.
Lasciate ogni speranza, voi ch'entrate.

Goodnight
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 15.06.2004 (Вт) 17:31
Откуда: Msk

Сообщение Goodnight » 17.06.2004 (Чт) 16:03

Спасибо! Кажется понял, пошел копать. :wink:


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

    TopList  
cron