Универсальный экспорт отчета в 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
  • Просмотров: 1727
  • Комментариев: 0
  • Создан: 02.03.2011 18:44

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

Ваши предложения и пожелания пишите на pro@kosmom.ru

Теги

ajax axios backup bootstrap core framework eloquent excel home project html ios javascript keep-alive kpi laravel legacy mvp orm php rip scroll solid timestamp undefined vue vuetify watch безопасность биометрический паспорт ваша любаша для путешествий загран на 10 лет загран паспорт загранпаспорт нового образца зимние книги как заполнить анкеты кеширование книги на новый год логирование мцф недвижимость новогодние книги образец заполнения антеты паспорт для путешествий паспорт нового поколения печать продукт проектирование прокси разработка ремонт ремонт в апартаментах ремонт нежилого помещения самокат сдача сколько стоил ремонт апартаментов спорт стандарты таблица финансы хостинг цена ремонта что почитать зимой юзабилити

Случайный пост

31.03.2015 19:04
Полный аякс