zV-class XLSX - класс для генерации xlsx файла, с поддержкой страниц

  • Не нравится
  • -1
  • Нравится
zV-class XLSX - класс для генерации xlsx файла, с поддержкой страниц
Привет всем!

Понадобилось мне как-то отдавать табличные данные пользователю в несколько страниц.
Хм, "csv" - подумал я! Но не тут-то было.. не поддерживает csv страницы. И вот тогда, подумалось, что все это дело можно засунуть в xls файл, но хостинг был шаред, практически пустой. После некоторых часов поисков готового рабочего варианта было принято решение писать свой "велосипед"...

Вобщем методом научного тыка в течении пары часов нашел что за что отвечает и как этот xlsx генерируется. Потом порядком времени ушло на то чтобы это все собрать воедино в более-менее вменяемый вариант. Ну, и собственно все получилось, и даже работает! smile

Итак, класс "zV-class XLSX"! Не требователен к серверу, требуется модуль Zlib, но он практически везде есть. Архив с нужными файлами прикрепил, а сейчас опишу как там все работает.

В архиве найдете:
папку skeleton - тут лежит "скелет" будующих xlsx файлов
папку templates - тут темплитки файлов, которые будем менять
файл sxlsx.php - сам файл класса
файл zipfile.php - класс zip-архиватора

Работает в 2007-м екселе!


Как сгенерировать файл


include(dirname(__FILE__) . '/sxlsx/sxlsx.php'); // инклюдим файл класса

$sxlsx = new sxlsx('/tmp/test.xlsx'); // будем создавать файл /tmp/test.xlsx
$sxlsx->addSheet(1, 'страница 1'); // создаем новую страницу. '1' - ID страницы;  'страница 1' - её название (если не указано, будет использоваться дефолтное)
$sxlsx->addData('a1', 'Здесь A1'); // добавляем данные в ячейку A1 на ПЕРВОЙ странице. 'a1' - ячейка (колонка-ряд); 'Здесь A1' - контент ячейки (если не указан, ячейка очищается)

$sxlsx->addSheet(2, 'номер два'); // добавляем вторую страницу
$sxlsx->addData('b3', 'Здесь B3'); // добавляем данные в ячейку b3 на ВТОРОЙ странице

// теперь хотим снова добавить данные на первую страницу:
$sxlsx->selectSheet(1); // "перелистываем" на первую страниу. '1' - ID страницы
$sxlsx->addData('b1', 'Здесь B1 на первой странице');

$sxlsx->generate(); // генерируем
// ВСЁ!, файл можно забирать!

/// еще есть метод deleteSheet(ID) - удаляет страницу по её ID
/// класс выбрасывает исключение sxlsx_Exception при ошибке



Есть варианты генерации:
  • если при создании объекта указывается путь до конечного файла, то файл сохраняется туда. Если ничего не указывать, то, соответственно ничего никуда не сохранится.
  • если при вызове функции generate() передать в нее название файла (например, просто file.xlsx), то файл будет предложен к скачиванию пользователю под этим именем.
  • ну, и тут уже можно комбинировать: можно просто отдать файл пользователю, без сохранения на сервер, а можно и сохранить и отдать... А можно вообще ничего не делать smile


На будущее


  • сделать возможным изменять ширину колонок и высоту строк
  • стили тектса, цвета и прочие красивости
  • немного разделить исключения на разные типы
  • еще че-нибудь


Cамое сложное в программировании - писать описание к тому что напрограммировал smile Смотрите класс, там могут быть недокументированные функции.

И еще...


Может такое быть, что файл не будет открываться. Решение есть :) В файлах:
\xl\sharedStrings.xml
\xl\workbook.xml

сменить кодировку на utf8. + можно добавить к класс принудительную установку кодировки.

Все)
Удачи!

zv-class-xlsx.rar [9.32 Kb] (cкачиваний: 93)

Коментарии