Экспорт в excel при помощи php

Параллельно с формированием бланков в rtf-формате, и работой с word из PHP или javascript иногда требуется сформировать средствами PHP документ EXCEL по уже готовому шаблону.

Готовых php-классов для работы с файлами xls (формат программы Microsoft excel) на сегодняшний день хватает. Однако, при заполнении таблицы предусмотреть все необходимые операции для нормального отображения (увеличение высоты строки, ширины строки и т.д.) довольно сложно.

Задачу экспорта в формате Excel решал на php следующим образом…

Тут стоит оговориться, все же основная хитрость не в конкретном языке, а в подходе - аналогичным способом можно поступить и с использованием любого другого языка, будь то серверный perl, python, или даже C-pascal без красивого оконного интерфейса. И даже при программировании под Windows использование такого способа даёт небольшой плюс - для формирования Excel-документа нам не требуется установленный на компьютере “офис”.

Итак, предварительный этап: Берем нужный бланк и сохраняем его в… html (файл - сохранить как - HTML-документ). В результате получаем что-то похожее:

<html xmlns:o=”urn:schemas-microsoft-com:office:office”
xmlns:x=”urn:schemas-microsoft-com:office:excel”
xmlns=”http://www.w3.org/TR/REC-html40″>

Открываем в текстовом редакторе и повторяющиеся строки (в принципе, можно аккуратно пройтись и по всему файлу) “очищаем” от лишних атрибутов (жестко задающих высоту-ширину ячейки), получая чистый <tr>…</tr>. Дальше - всё просто… Строки “размножаем”, попутно заполняя соответствующие ячейки нужными значениями… (в php функция str_replace успешно справляется с этим)

У меня при такой реализации нормально работали формулы (сумма по колонке), правда с небольшой хитринкой (если не ошибаюсь, сумма задавалась на ячейку выше или ниже…).

И ещё маленькая хитрость - чтобы документ сохранялся с расширением xls следует отдать браузеру нужный заголовок:

header('Content-type: application/octet-stream'); // можно и xls mime-type, но так "универсально"
header('Content-Disposition: attachment; filename=filename.xls');

UPD За дополнение спасибо пользователю tambourine

OpenOffice при открытии файла такого формата может неверно воспринимать кодировку. Лечится, почти как в обычном HTML документе, (с заменой mime-типа на excel-тип):

<meta http-equiv="Content-Type" content="application/vnd.ms-excel; charset=utf-8" />

или:

<?php header('Content-type: application/vnd.ms-excel; charset=windows-1251');?>

Метки: ,

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (4) к записи “Экспорт в excel при помощи php”

  1. Николай сообщает :

    Прочитал, уловил, что способ крайне быстрый и хитрый, но так и не понял до конца, в чем он состоит :) отдавать html с заголовками xls?

  2. levik сообщает :

    Николай, попробуйте для начала сохранить xls-файл как веб-страницу, а затем открыть её в текстовом редакторе. Думаю, всё станет ясно ;)

  3. rassola.net сообщает :

    Данный метод знал давно, нужно быть внимательным к кодировке. Но проблема не в этом, а в том что нумерация строк в ворде (левая линейка с цифрами) не соответствует колличеству тегов , которые в таблице и означают строку.

  4. rassola.net сообщает :

    В догонку, решил проблему она была в том что если оставить где то в html таблице теги br и hr то он понимает это как новая строка..странно несколько…

Добавить комментарий