Универсальный экспорт отчета в word и excel

Приветствую. Хочу поделиться основной мыслью универсального экспорта в форматы 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");

Пользователь видит только красивое название файла и красивую структуру с уже проставленными нужными разметками и содержанием.

Данный метод можно использовать для быстрой организации Прайс листов, организации отчетов, экспорта данных. И он доступен каждому. А также позволяет легко и быстро вносить необходимые поправки

  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 1598
  • Комментариев: 0
  • Создан: 02.03.2011 18:44

Комментарии (0)