PHP - Генерация XLS файлов (как создать валидный XLS файл)

8 июня 2010
Просмотров: 78833Обсудить
Рубрика: Программирование -> PHP

Начальство заставило генерировать XLS файлы отчетов (выгрузка заказов, заказанных товаров, сводка по покупателям и т.д.). С генерацией обычного текста (CSV формат, ";" - разделитель) проблем не было. Но вот MAC OS  начальства в упор не хотела понимать того, что ей пытались втюхать. Выход - генерить другой формат. Я б на html или xml становился, но ЖЫЖ! надо графики делать и все такое ... Вообщем - без экселя - никуда =(

Справедливости ради надо сказать, что генерацию именно экселевского формата я нашел достаточно быстро: и на хабре (http://habrahabr.ru/blogs/php/18726/) и на OpenNET (http://www.opennet.ru/base/dev/php_gen_excel.txt.html). Созданные XLS файлы прекрасно открывались на 3-х тестируемых осях (mac,win & ubuntu родимая =)).

Еще надо сказать, что на том же хабре многие кидались инфой об PHP Spreadsheet_WriteExcel, но я его использовать не мог, поскольку ему нужен PEAR  и еще пару либ, которые админ на сервак ставить не хотел (мотивируя тем, что надо хпх обновить, а это принесло бы много хлопот).

В итоге я случайно наткнулся на http://phpexcel.codeplex.com/ -PHPExcel - OpenXML - Create Excel2007 documents in PHP - Spreadsheet

engine.

В нем есть вообще все, что только может понадобится (ИМХО): нормальная дока, много примеров, и самое главное - много возможностей.

Я в своих задачах использовал минимум, но все же:

1) Установка размеров ячеек

2) Цвет текста

3) Размеры текста

4) Шрифты

5) Заливка цветом области

6) Рамки

7) Вставка в ячейки формул

8) Вставка в ячейки активных (кликабельных) ссылок

9) Работа с разными листами

Ну и многое другое.

Разбираться там не в чем!! Множество примеров позволяют почти копипастом создавать необходимые скрипты.

Ну и напоследок - пример из их же тестов:

/**
 * PHPExcel
 *
 * Copyright (C) 2006 - 2010 PHPExcel
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   PHPExcel
 * @package    PHPExcel
 * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
 * @version    1.7.3c, 2010-06-01
 */
/** Error reporting */
error_reporting(E_ALL);
/** PHPExcel */
require_once '../Classes/PHPExcel.php';
// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();
// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
							 ->setLastModifiedBy("Maarten Balliauw")
							 ->setTitle("Office 2007 XLSX Test Document")
							 ->setSubject("Office 2007 XLSX Test Document")
							 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
							 ->setKeywords("office 2007 openxml php")
							 ->setCategory("Test result file");
// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Hello')
            ->setCellValue('B2', 'world!')
            ->setCellValue('C1', 'Hello')
            ->setCellValue('D2', 'world!');
// Miscellaneous glyphs, UTF-8
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A4', 'Miscellaneous glyphs')
            ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// Echo memory peak usage
echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB\r\n";
// Echo done
echo date('H:i:s') . " Done writing file.\r\n";

Еще раз ресурс: http://phpexcel.codeplex.com/

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
Метки: ,


Комментариев: 7
Подписаться на комментарии по RSS
  • #12011-10-11 в 16:26:13Владимир (анонимно)

    Попробовал. Действительно крутая штука. Наверное, лучший вариант для генерации XLS из тех, что я видел.

    Очень помогло. Спасибо!


  • #22011-10-11 в 16:29:26yaap

    @Владимир (анонимно)

    Именно, лучший такчже и из тех, что видел я! ;)


  • #32011-12-26 в 17:48:21Spectrum (анонимно)

    Попробуемс! за советы спасибо большущее!


  • #42012-08-03 в 17:35:56туяя (анонимно)

    спасибо очень помогло сделать достаточно приличный файл с формтаированием ссылками, неподвижными заголовками cool smile


  • #52013-09-03 в 00:15:58аноним (анонимно)

    как е запустить?


  • #62013-09-03 в 00:19:07yaap

    @аноним (анонимно)

    Кого ее?

    Если вы про библиотеку - то это обычный набор скриптов.

    Пишете свой скрипт, подключаете библиотеку, прописываете нужные действия и все =)

    На сайте либы много примеров (от самых простых до заумных)


  • #72014-07-22 в 14:28:14Аноним (анонимно)

    snake


Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)