[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Simple XLSX - класс для генерации xlsx файла
Страницы: 1, 2
kirik
Проверил в MS Excel - не открываются файлы.. ща буду решать.
Все, теперь работает в 2007-м. Файл обновил.

Привет все!

Понадобилось мне как-то отдавать табличные данные юзеру в несколько страниц. Хм "csv" - подумал я! Но не тут-то было.. не поддерживает csv страницы. И вот тогда, подумалось, что все это дело можно засунуть в xls файл, но хостинг был шаред, практически пустой. После некоторых часов поисков готового рабочего варианта было принято решение писать свой велосипед.
Вобщем методом научного тыка в течении пары часов нашел что за что отвечает и как этот xlsx генерируется. Потом порядком времени ушло на то чтобы это все собрать воедино в более-менее вменяемый вариант. Ну и собственно все получилось, и даже работает! smile.gif Итак, класс "Simple XLSX"! (блин, надо новое название придумывать.. уже есть такой класс, только он читает xlsx файл smile.gif ). Не требователен к серверу, требуется модуль Zlib, но он практически везде есть. Архив с нужными файлами прикрепил, а сейчас опишу как там все работает.
В архиве найдете:
Цитата
папку skeleton - тут лежит "скелет" будующих xlsx файлов
папку templates - тут темплитки файлов, которые будем менять
файл sxlsx.php - сам файл класса
файл zipfile.php - класс zip-архиватора


Как сгенерировать файл:
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() передать в нее название файла (например просто "my_xlsx_file.xlslx"), то файл будет предложен к скачиванию юзеру под этим именем.
Ну и тут уже можно комбинировать: можно просто отдать файл юзеру, без сохранения на сервер, а можно и сохранить и отдать.. а можно вообще ниче не делать smile.gif

ЗЫ1. да, код не комментированный, торопился smile.gif Обещаюсь исправиться!



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

ЗЫ2 самое сложное в программировании - писать описание к тому что накодил smile.gif Смотрите класс, там могут быть недокументированные функции smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.