Создание файлов Excel средствами PHP
Возникла нужда создавать Excel-файлы средствами PHP. О существовании PEAR::Spreadsheet_Excel_Writer я уже знал - видел статью Создание таблиц Excel средствами PHP на http://phpclub.ru. Поиск в Google помог установить PEAR и Spreadsheet_Excel_Writer. Пример использования класса:
<?php
require_once 'Spreadsheet/Excel/Writer.php';
// We give the path to our file here
$workbook = new Spreadsheet_Excel_Writer('test.xls');
$worksheet =& $workbook->addWorksheet('My first worksheet');
$worksheet->write(0, 0, 'Name');
$worksheet->write(0, 1, 'Age');
$worksheet->write(1, 0, 'John Smith');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);
// We still need to explicitly close the workbook
$workbook->close();
?>
require_once 'Spreadsheet/Excel/Writer.php';
// We give the path to our file here
$workbook = new Spreadsheet_Excel_Writer('test.xls');
$worksheet =& $workbook->addWorksheet('My first worksheet');
$worksheet->write(0, 0, 'Name');
$worksheet->write(0, 1, 'Age');
$worksheet->write(1, 0, 'John Smith');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);
// We still need to explicitly close the workbook
$workbook->close();
?>
Для создания и чтения данных из файлов формата OpenXML (который используется в MS Excel 2007) можно использовать набор библиотек PHPExcel. Для их работы требуется версия PHP 5.2 или выше, с установленными библиотеками Zip, XML и GD2. Пример кода:
<?php
/** Error reporting */
error_reporting(E_ALL);
/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
/** PHPExcel */
include 'PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.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");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');
// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// Echo done
echo date('H:i:s') . " Done writing file.\r\n";
?>
/** Error reporting */
error_reporting(E_ALL);
/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
/** PHPExcel */
include 'PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.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");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');
// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// Echo done
echo date('H:i:s') . " Done writing file.\r\n";
?>
Наконец, друзья из Индии нам выложили класс Excel Writer. Вот пример его работы:
<?php
include("excelwriter.inc.php");
$excel=new ExcelWriter("myXls.xls");
if($excel==false)
echo $excel->error;
$myArr=array("Name","Last Name","Address","Age");
$excel->writeLine($myArr);
$myArr=array("Sriram","Pandit","23 mayur vihar",24);
$excel->writeLine($myArr);
$excel->writeRow();
$excel->writeCol("Manoj");
$excel->writeCol("Tiwari");
$excel->writeCol("80 Preet Vihar");
$excel->writeCol(24);
$excel->writeRow();
$excel->writeCol("Harish");
$excel->writeCol("Chauhan");
$excel->writeCol("115 Shyam Park Main");
$excel->writeCol(22);
$myArr=array("Tapan","Chauhan","1st Floor Vasundhra",25);
$excel->writeLine($myArr);
$excel->close();
echo "data is write into myXls.xls Successfully.";
?>
include("excelwriter.inc.php");
$excel=new ExcelWriter("myXls.xls");
if($excel==false)
echo $excel->error;
$myArr=array("Name","Last Name","Address","Age");
$excel->writeLine($myArr);
$myArr=array("Sriram","Pandit","23 mayur vihar",24);
$excel->writeLine($myArr);
$excel->writeRow();
$excel->writeCol("Manoj");
$excel->writeCol("Tiwari");
$excel->writeCol("80 Preet Vihar");
$excel->writeCol(24);
$excel->writeRow();
$excel->writeCol("Harish");
$excel->writeCol("Chauhan");
$excel->writeCol("115 Shyam Park Main");
$excel->writeCol(22);
$myArr=array("Tapan","Chauhan","1st Floor Vasundhra",25);
$excel->writeLine($myArr);
$excel->close();
echo "data is write into myXls.xls Successfully.";
?>
Дмитрий:
а как можно не создать, а распарсерить ранее созданный документ? причём для парсинга я нашёл класс, но он не умеет выдирать картинки, не подскажите, есть ли класс, который это может?
4 Декабрь 2008, 7:38Дмитрий:
изучил PHPExcel он уже умеет находить картинк, получать информациб о том к какой ячейке он привязан, но он по прежнему не может выдрать эту картинку =((
4 Декабрь 2008, 9:15Дмитрий:
Проблему разрешил, всё оказалось совсем просто))
Для тех, кто тоже маился с этой проблемой пишу решение
——————————————————-
С помощию класса PHPExel можно получить внутренний путь к изображениею в читаемом экселевском файле, например
zip://read.xlsx#xl/media/image1.jpeg
Как выяснилось PHP может легко прочитать содержимое по этому пути с помощтю функции file_get_contents() [!! Внимание эта функция есть только в PHP5, если у вас PHP4, то юзайте fopen() и fgets() !!]
Пример кода:
$im = file_get_contents(”zip://read.xlsx#xl/media/image1.jpeg”);
file_put_contents(”./image1.jpeg”, $im);
P.S. Автору за ссылку на класс огромное спасибо
4 Декабрь 2008, 9:52admin:
а как можно не создать, а распарсерить ранее созданный документ?
4 Декабрь 2008, 11:07Чтение Excel-файлов средствами PHP
Как выдирать картинки - не знаю, но я вижу, вы уже разобрались
Дмитрий:
…Это чудная статья…только вот стоит предупредить…что с настройкой у PEAR и Spreadsheet_Excel_Writer всё не так гладко может быть…чаще файл go-pear.bat …лежит в корне (php) может и вовсе отсутствовать.
12 Декабрь 2008, 14:18ps:Замечательный класс Excel Writer друзей из Индии можно ли как-то получить(просьба) не регясь по той ссылке, что выложена?
admin:
Дмитрий, скачать Excel Writer
12 Декабрь 2008, 14:44Вадим:
Kак Excel Writer (Индийский вариант) заставить записывать в файл по Русски?
8 Февраль 2009, 15:19Professor:
Присоединяюсь к вопросу.
19 Февраль 2009, 15:50Уж очень хотелось бы кирилицу записывать.
Professor:
Решил проблемму.
19 Февраль 2009, 16:15Используйте сущности
htmlentities(”привет”,ENT_NOQUOTES,”cp1251″)
mirua:
Все очень просто: Нужно в excelwriter.inc.php в строке
заменить us-ascii на windows-1251
5 Июль 2011, 13:49