Word --> XML

Программирование на Visual Basic for Applications
skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Word --> XML

Сообщение skiperski » 10.08.2005 (Ср) 23:57

Задача: конвертировать содержание документа в XML.

Проблема уже неоднократно поднималась на форуме, но так и не получила логического завершения, т.к. приемлемое решение не найдено.

Простейшие преобразования - bold, italic, underline - освоились без проблем. Картинки, принадлежащие параграфу, тоже, но с ограничениями (не знаю как определить выравнивание картинки относительно параграфа). Простые линки осилил. Столкнулся с траблой на линке с картинкой, который InlineShape. Отдельная коллекция есть, а как определить где именно в тексте этот линк? И как сохранить картинки в JPG? В BMP GSerg падсказал http://bbs.vbstreets.ru/viewtopic.php?t=8674&highlight=saveas, но тоже не знаю где взять объект Clipboard.

Кроме того при переборе посимвольно неприлично большие затраты по времени: на простейший документ около пяти минут.

Ешё: не все символы записываются в XML корректно. Всякие умляуты преобразуются в базовую буковь (é --> e, ü --> u), а некоторые просто знаками вопроса отображаются и всё. А, например, вертикальный перевод строки пишется в XML, но потом этот XML не читается, т.к. невалиндный символ :(.

Короче, у кого что есть сказать по теме - прошу.

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

Сообщение GSerg » 11.08.2005 (Чт) 5:15

Так...
Хм...

Позиция InlineShape - это InlineShape.Range.Start.

Объект Clipboard... эээ... Из VBA придётся OpenClipboard, GetClipboardData(vbCFBitmap), CopyImage, CloseClipboard. Потом эту картинку надо скормить обёртке Тёмыча (искать по словам GDI+, автор tyomitch), она во что угодно сохранит. Потом ей (картинке, не обёртке) DeleteObject.

Далее... Что если указать для XML соотв. кодировку до того, как туда писать? Не работал близко с этим делом, но подозреваю, что вполне можно UTF-8 воткнуть и работать без потери символов.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.08.2005 (Чт) 9:29

GSerg писал(а):Так...
Хм...

Угу...

GSerg писал(а):Позиция InlineShape - это InlineShape.Range.Start.

Это-то понятно. Нет ли где-нить незамеченного мною линейного представления док-та? Типа вот начался параграф - здесь всё понятно, потом картинка с выравниваем влево, далее 3 слова, потом ссылка с картинкой и т.д. Я делаю проход по параграфам, словам и, если надо, символам, а эти шэйпы приходится отдельно вылавливать :(. И так всё тормозит, а тут ещё исключения обрабатывать приходится.

GSerg писал(а):Объект Clipboard... эээ... Из VBA придётся OpenClipboard, GetClipboardData(vbCFBitmap), CopyImage, CloseClipboard.

Временнро совсем нет хелпа.

GSerg писал(а):Потом эту картинку надо скормить обёртке Тёмыча (искать по словам GDI+, автор tyomitch), она во что угодно сохранит. Потом ей (картинке, не обёртке) DeleteObject.

С его обёрткой работал - знаю, но word типа сам конвертит изображения в JPG при сохранении док-та в HTML. И XML-структуру док-та тоже строит. Может есть публичные методы?

GSerg писал(а):Далее... Что если указать для XML соотв. кодировку до того, как туда писать? Не работал близко с этим делом, но подозреваю, что вполне можно UTF-8 воткнуть и работать без потери символов.

Как-то очень странно работает. С этими кодировками вечно путаница получается. Вроде бы и работаю с XML уже давным-давно, но каждый раз что-нибудь новенькое и заковыристое найдётся.


Утро вечера мудренее: вот подумал, может кто знает решение проще. Планируется виртуальная газета, будет вестись параллельно с уже имеющейся реальной, тексты реальной набираются в Кварк-чего-то там. Формат самого кварка ещё не смотрел, чего умеет делать тоже не знаю, но подозреваю, что в word сконвертировать документ сумеет. Потому и привязался к ворду. Статьи несложные: текст с выделением + пара-тройка сопровождающих картинок. Может есть более простые уже готовые решения для получения простых html-ек? И так чтотбы девочки-мальчики не утомились сами при конвертации и меня не утомили при объяснении как это делать. Иначе, подозреваю, что конвертировать и править придётся мне :(.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.08.2005 (Чт) 10:22

Шо, ещо нет никого? Хлопцы, так жеж и замерзнуть можно! (© БГУ)

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

Сообщение alibek » 11.08.2005 (Чт) 10:32

А я бы попробовал выдирать данные из файлов Quark. Только не знаю расширения файла, но если формат файла несложный, можно было бы попробовать.
Lasciate ogni speranza, voi ch'entrate.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.08.2005 (Чт) 12:55

alibek писал(а):А я бы попробовал выдирать данные из файлов Quark. Только не знаю расширения файла, но если формат файла несложный, можно было бы попробовать.

К сожалению пока ещё не смотрел его формат. Нне знаю есть ли к нему открытая объектная модель. А формат, думаю, там будет посложнее ворда.

С кодировками почти разобрался - это просмотрщики криво отображали, а в самом файле всё в порядке.

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

Сообщение alibek » 11.08.2005 (Чт) 12:58

А какое расширение у файлов?
Lasciate ogni speranza, voi ch'entrate.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.08.2005 (Чт) 13:22

alibek писал(а):А какое расширение у файлов?

документ QXD
шаблон QXT
проект QXP

Вроде бы так

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.08.2005 (Чт) 18:48

Проблема практически снята. Вот такой вот фильтр HTML-фильтр Office 2000 версии 2.1 делает практически то, что надо. Умеет запускаться из коммандной строки. Осталось сделать обёртку или макрос и усё.

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

Сообщение alibek » 12.08.2005 (Пт) 7:46

Не успел :)
У меня вечером как-раз мелькнула мысль, что можно файл пересохранить в RTF или HTML и работать уже с ним.
Lasciate ogni speranza, voi ch'entrate.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 12.08.2005 (Пт) 10:49

Вообще-то в идеале я хотел бы на выходе иметь XML чтобы потом над ним изгаляться, но... Сам Word очень грамотно и быстро строит html, сохраняет все картинки и т.д. + этот фильтр тоже очень быстро убирает избыточный код. В итоге получается очень компактный, почти чистый html. В то время как у меня на выполнение макроса с половинным функционалитетом тратится куча времени. Поэтому овчинка выделки не стоит. Проще уже пропарсить полученный html.

Кстати, чистит фильтр очень хорошо.


Вернуться в VBA

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

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

    TopList