Хочу продолжить тему формирования документов MS Office в виде простых текстовых файлов. В этом посте я расскажу как сделать в документах разбиение на страницы, внедрить в эти документы макросы, графику и диаграммы.
Сама суть способа описана здесь:
Формирование отчетов в форматах MS Office без использования MS Office
Формирование документа Word на сервере Django
Для чего это все? Все просто. Это позволяет использовать данный способ на любых языках программирования и на любых платформах.
Конечно, обойтись совсем без MS Office не выйдет. Первоначально необходимо сделать шаблон документа, как это я уже описал.
Параллельно я поднял эти темы в форумах по программированию. Очень интересно было узнать мнение спецов и иже с ними. Отзывы были от удивления простотой решения до полного отторжения. Приятно было узнать, что многие сами пришли к этому способу и успешно его используют.
Многие заявляют, что это не подлинный документ MS Word или MS Excel и по этому нельзя использовать всю мощь этих программ. Да ради бога. Это действительно не нативные документы. Но они решают свои задачи. Они позволяют сформировать на web-сайте накладную и выдать ее пользователю. Выдать ее в таком виде, что ее можно сразу распечатать и подшить. Можно откорректировать или использовать стандартные возможности MS Word или MS Excel. Например теже формулы. Кроме того, кто сказал что эти документы уже не могут содержать необходимые формулы? Но об этом дальше.
Конечно можно использовать для формирования MS Word или MS Excel документов OLE-технологию. Но это исключает формирование документа на сервере. Это смерть тонкому клиенту.
Можно также использовать компоненты для формирования документов. Они есть фактически во всех языках. Для Python это к примеру PyRTF. Но это такая рутина...
Используя метод который предлагаю я можно порвать эти горизонты. Например упакуйте данные в XML документ и дальше путем накладывания того или иного XSL вы будите получать разные документы. Разного внешнего вида при этом по желанию в формате MS Word или MS Excel.
Да и без XML программировать офисные документы гораздо проще чем при использовании специальных компонент. Просто используя системы шаблонов.
Но чето я увлекся. Просто поэзия какаято. Теперь как же всетаки засунуть в документ картиночки.
По началу меня это совершенно не интересовало. Так как вся необходимость была в простых документах. Единственное что мне со временем понадобилось так это разбиение документа на страницы. И этот момент совпал с моментом поднятия этой темы в форумах. Отвечая на вопросы...
С благодарностью хочу отметить подсказку pythonwin с форума python.com.ua. В ходе обсуждения он вспомнил про формат MHT. Это формат для сохраненных страниц Internet Explorer. При этом вся графика, стили, и т.д. сохраняется в одном файле. Сам документ практически в формате HTML. У меня когдато были проблемы с этим форматом и я даже не обратил внимание на возможность программ MS Office сохранять документы в этом формате.
Обновленный способ
Необходимый документ подготовленный в MS Office сохраняем в формате MHT. Дальше все как я описывал в предыдущих постах. Точка. Это решает проблемы разбиения документов на страницы, а также внедрения в эти документы макросов, графики и диаграмм.
Единственное что при открытии этого файла в текстовом редакторе (например в блокноте) для дальнейшей доводки видно, что весь кирилистический текст представлен в UTF-8. Эдакая кашица из решеточек. Причем если вместо этих решеточек набрать кирилистический текст, а потом открыть документ в MS Word или MS Excel читаемого текста невидать. Если через систему шаблонов вставить кирилистический текст - то с ним тоже будет не очень гуд.
Но это просто решается. Идем в редакторе в самый ферх файла и находим в секции <head> находим:
<meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dus-ascii">
Теперь 3Dus-ascii меняем на 3Dwindows-1251 и все будет хорошо.
По поводу формул и др.
Пробовал в MS Word вставить картинку.
Работает.
Пробовал в MS Word вставить разрыв страницы.
Работает.
Пробовал в MS Excel вставить формулу суммы по диапазону ячеек и пропустить через все эти жернова преобразований.
Работает.
Пробовал в MS Excel на одном листе составить диапазон значений для диаграммы, а на другом листе ее же и разместить.
Работает. После преобразования в MHT и открытия в MS Excel при изменении значений данных диаграммы - диаграмма меняется.
Всякие НО
OpenOffice не открывает документы "пропущенные" через MHT. Но небыло никаких проблем с документами сформированными "через" HTML.
Если необходимо формировать документы под OpenOffice очевидно прийдется повторить все тоже самое, но не с MS Office, а именно с OpenOffice.
Если необходимо универсальное преобразование то очевидно лучшее решение это XML + XSL.
Собственно все. Итак получился слишком длинный пост. Если у вас есть идеи и предложения - буду рад услышать.