Приветствую. Хочу поделиться основной мыслью универсального экспорта в форматы DOC и XLS. На сегодняшний день существует множество готовых программных модулей, которые умеют генерировать документы или электронные таблицы.
Когда обычные браузеры не справляются, в частности с выводом на печать документов с одинаковым форматом листа, с повторением шапки таблицы и другими мелочами.
Существующие решения требуют либо наличие хостинга на ОС Windows (com методы), либо работают только с версией 2007 (т.к. формат docx и xlsx существенно упрощены по своей структуре, чем doc и xls) (библиотеки codeplex).
Способ может показаться очевидным и тривиальным. И, возможно, Вы уже вовсю его используете или отказались от него.
Суть в том, что для того, чтобы word или excel правильно могли открыть документ – совершенно не обязательно передавать им корректно сохраненный документ, они хорошо работают с html форматами, который легко доступен для скрипта.
Существуют некоторые особенности и ограничения. Подробнее – ниже:
Узнать все возможные настройки можно элементарно – сохранив документ в html виде. Не обязательно оставлять все теги, что предлагает office, достаточно использовать основные. Стили обязательно нужно передавать в заголовках документа с тегом <style></style>, ссылка на отдельный файл – игнорируется.
Из преимуществ метода – отсутствие необходимости документации. Сделал – сохранил – проверил. Быстрая корректировка и универсальность (все пользователи увидят одно и тоже)
Из недостатков – нет возможности прикреплять к документу картинки и другие вложения, только указав ссылки
Ворд и Excel сохраняет все основные свойства документа в структуру XML, которую
располагает внутри тега head
<xml>
<o:DocumentProperties>
<o:Author>Автор документа</o:Author>
<o:LastAuthor>Последний автор, сохранивший документ</o:LastAuthor>
<o:Revision>Редакция</o:Revision>
<o:Created>Датасоздания</o:Created>
<o:LastSaved>Дата последнего сохранения</o:LastSaved>
<o:Company>Производитель</o:Company>
<o:Version>Версияпрограммы</o:Version>
</o:DocumentProperties>
</xml>
В качестве дополнительных материалов – рисунков – можете использовать web-интерфейс с ссылками <img src=”http://”> смело ссылаться на сервер. Если человек скачал отчет – он также может скачать и рисунок. Других способов прикрепить файлы к документам и скачать как единый файл – данный метод не позволяет
Word
Word, дополняет XML структуру при помощи ветки свойств <w:WordDocument> - в которой расписаны лишь некоторые специфические свойства (показывать ли скрытые символы, зум, прописаны основные стили), т.к. они являются не существенными. При отсутствии ветки – ее свойства берутся по умолчанию.
В стилях чуть ниже указывается самое интересное – описание разделов, размер листа для каждого раздела, отступы, ориентация примерно следующим образом:
Весь документ делится на разделы и располагает всю информация внутри тегов
<div class=Section1>Содержимое раздела 1</div>
<div class=Section2>Содержимое раздела 2</div>
И в начале документа – прописывает стиль для каждого из разделов следующим образом:
<style>
<!--
@page Section1
{size:841.9pt 595.3pt; /* Размер бумаги */
mso-page-orientation:landscape; /* Ориентация*/
margin:3.0cm 2.0cm 42.5pt 2.0cm; /* Отступы*/
mso-header-margin:35.4pt; /* Расположение верхнего колонтитула */
mso-footer-margin:35.4pt; /* Расположение нижнего колонтитула */
mso-paper-source:0; /* Источникбумаги*/
}
div.Section1
{page:Section1;}
-->
</style>
Далее – каждый раздел привязывается к объявленной переменной
В стандартных стилях – прибавляются и дополнительные, не доступные для всех браузеров свойства – такие как двойное зачеркивание, поворот на 90* для таблиц или списков, несколько колонок и многие другие.
Самый простой способ – создать нужную структуру в вордовском документе и сохранить в html формате. После чего следует просто вычистить нужные свойства и новый универсальный готовый шаблон для отчетов – готов.
Excel
Для Excel все аналогично.
Он сам по своему внутреннему усмотрению парсит текст в строки, самостоятельно объединяет ячейки и проводит форматирование.
Документы выглядят несколько проще. После перечисления основных атрибутов документа – указывается структура.
Если документ содержит 1 лист – все содержимое укладывается на одном коротком html файле. Если листов несколько – excel автоматом вписывает javascript, которые позволяют переключаться между листами и сохраняет все листы в отдельную папку с названием документа. Так что нам для отображения отчета – хватит и одного листа во избежание множества проблем.
Структура документа XLS хранится в следующей ветке и отображается сразу после заголовка. Я укоротил структуру, оставил лишь важные для оформления свойства
<!--[if gte mso 9]><xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Название листа 1</x:Name>
<x:WorksheetOptions>
<x:Selected/>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml><![endif]-->
В начале указывается листы, перечисляются настройки печати, активная колонка и положение окна, а также свойства блокировки.
Можно не перечислять данную структуру, или опустить
Точно также – в документ добавляются специфичные и видимые только для Excel стили, такие как поворот текста, выравнивание ширины и формат ячейки,
Формулы указываются в атрибуте x:fmla, например
<tdx:fmla="=1+2"></td>
Содержимое ячейки – замениться результатом формулы в этом случае при открытии через Excel
Если в документе присутствуют десятичные числа – excel может число 20.02 представить как 20 февраля. Чтобы этого не произошло – обязательно проставьте следующий стиль для таблицы с данными
<style>
td{
mso-number-format:"@";
}
</style>
PHP
В завершении – чтобы все выглядело красиво – подвязываем к отчету WEB. Ссылка может вести на любой файл. На всякий случай ставим target=”_blank”
И в заголовках php файла прописываем
header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=Названиефайла.doc");
Пользователь видит только красивое название файла и красивую структуру с уже проставленными нужными разметками и содержанием.
Данный метод можно использовать для быстрой организации Прайс листов, организации отчетов, экспорта данных. И он доступен каждому. А также позволяет легко и быстро вносить необходимые поправки