Если надо просто выгрузить некую таблицу с сайта как файл excel, то подойдет достаточно простой способ.
Основная идея — excel уже давно умеет сохранять свои документы как html. Ну и самое простое решение — сохраняем любой документ именно так, открываем в текстовом редакторе, смотрим что и как там написано, пытаемся воспроизвести.
Рассмотрим самый банальный пример: (запрос к базе данных не рассматривается… только та часть, которая выгрузит файл, понятный excel’ю.
1. Формируем заголовок:
/* // раскомментируйте строки ниже, если файл не будет загружаться header(«Content-Type: application/force-download»); header(«Content-Type: application/octet-stream»); header(«Content-Type: application/download»); */ //стандартный заголовок, которого обычно хватает header(‘Content-Type: application/vnd.ms-excel; charset=utf-8’); header(«Content-Disposition: attachment;filename=».date(«d-m-Y»).«-export.xls»); header(«Content-Transfer-Encoding: binary «); |
2. Теперь можно выводить ранее полученные данные, из MySQL, из файла, еще откуда — не важно. все на ваше усмотрения. Главное НЕ забыть сформировать стандартную HTML шапку под правильную кодировку (например utf-8) что бы в excel корректно отображалась кириллица. И не забываем про то, что кодировка файла скрипта также должна быть такой же.
echo ‘ <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> <html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en» lang=»en»> <head> <meta http-equiv=»content-type» content=»text/html; charset=utf-8″ /> <meta name=»author» content=»zabey» /> <title>Demo</title> </head> <body> ‘; |
3. И вот формирование самой таблицы, которая откроется в Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// заголовок таблицы echo ‘ <table border=»1″> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> ‘; while($row = $STH—>fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo ‘<tr> <td>’.$row[‘col1’].‘</td> <td>’.$row[‘col2’].‘</td> </tr>’; } echo ‘</table>’; echo ‘</body></html>’; // не забываем закрывать таблицу, боди и сам хтмл документ |
Код одним блоком внутри (далее).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// !заголовок /* // раскомментируйте строки ниже, если файл не будет загружаться header(«Content-Type: application/force-download»); header(«Content-Type: application/octet-stream»); header(«Content-Type: application/download»); */ //стандартный заголовок, которого обычно хватает header(‘Content-Type: application/vnd.ms-excel; charset=utf-8’); header(«Content-Disposition: attachment;filename=».date(«d-m-Y»).«-export.xls»); header(«Content-Transfer-Encoding: binary «); // !! Шапка хтмл echo ‘ <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> <html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en» lang=»en»> <head> <meta http-equiv=»content-type» content=»text/html; charset=utf-8″ /> <meta name=»author» content=»zabey» /> <title>Demo</title> </head> <body> ‘; // !!! Таблица с данными // заголовок таблицы echo ‘ <table border=»1″> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> ‘; while($row = $STH—>fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo ‘<tr> <td>’.$row[‘col1’].‘</td> <td>’.$row[‘col2’].‘</td> </tr>’; } echo ‘</table>’; echo ‘</body></html>’; // не забываем закрывать таблицу, боди и сам хтмл документ |
Загрузка…
// gl and gl2 excel file Export Program
public function glExcelFileExport()
{
$from_date1 = $this->input->post('from_date1');
$to_date1 = $this->input->post('to_date1');
$account_number = $this->input->post('account_number');
$glnames = $this->input->post('glnames');
$sql = "SELECT * FROM ut_sbi_reco_rungl WHERE value_date between '".$from_date1."' AND '".$to_date1."' ";
$result = $this->db->query($sql)->result_array();
if(count($result)>0)
{
require FCPATH . 'vendor/autoload.php';
$object = new PHPExcel();
$prestasi = $object->setActiveSheetIndex(0);
//manage row hight
$object->getActiveSheet()->getRowDimension(1)->setRowHeight(25);
// Excel Heading Description
if($glnames == 'gl1') {
//style alignment
$styleArray = array(
'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
);
$object->getActiveSheet()->getStyle('A1:U1')->getFont()->setBold(true);
$object->getActiveSheet()->getStyle('A1:U1')->applyFromArray($styleArray);
//border
$styleArray1 = array(
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN
)
)
);
//background
$styleArray12 = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => 'FFFF00',
),
),
);
//freeepane
$object->getActiveSheet()->freezePane('A2');
//column width
$object->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$object->getActiveSheet()->getColumnDimension('E')->setWidth(20);
$object->getActiveSheet()->getColumnDimension('F')->setWidth(12);
$object->getActiveSheet()->getColumnDimension('G')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('H')->setWidth(20);
$object->getActiveSheet()->getColumnDimension('I')->setWidth(20);
$object->getActiveSheet()->getColumnDimension('J')->setWidth(20);
$object->getActiveSheet()->getColumnDimension('K')->setWidth(20);
$object->getActiveSheet()->getColumnDimension('L')->setWidth(10);
$object->getActiveSheet()->getColumnDimension('M')->setWidth(12);
$object->getActiveSheet()->getColumnDimension('N')->setWidth(25);
$object->getActiveSheet()->getColumnDimension('O')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('P')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('Q')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('R')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('S')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('T')->setWidth(25);
$object->getActiveSheet()->getColumnDimension('U')->setWidth(15);
$object->getActiveSheet()->getStyle('A1:U1')->applyFromArray($styleArray1);
$object->getActiveSheet()->getStyle('A1:U1')->applyFromArray($styleArray12);
$object->getActiveSheet()->getStyle('I')->getNumberFormat()->setFormatCode("0.00");
$table_columns = array("SRL", "Scheme", "Tran Type", "App Refer", "OTH Refer",
"Account", "Name", "Value Date", "Amount", "Pay Category", "Rev Flg",
"Security", "Cheque Number", "SCH", "Book Date", "Cheque Date",
"Reg Id", "Inputter", "Narration", "FL", "Batch Number");
$column = 0;
foreach($table_columns as $field)
{
$object->getActiveSheet()->setCellValueByColumnAndRow($column, 1, $field);
$column++;
}
}
if($glnames == 'gl2') {
//style alignment
$styleArray = array(
'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
);
$object->getActiveSheet()->getStyle('A1:C1')->getFont()->setBold(true);
$object->getActiveSheet()->getStyle('A1:C1')->applyFromArray($styleArray);
//border
$styleArray1 = array(
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN
)
)
);
//background
$styleArray12 = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => 'FFFF00',
),
),
);
//freeepane
$object->getActiveSheet()->freezePane('A2');
//column width
$object->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$object->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$object->getActiveSheet()->getStyle('A1:C1')->applyFromArray($styleArray1);
$object->getActiveSheet()->getStyle('A1:C1')->applyFromArray($styleArray12);
$object->getActiveSheet()->getStyle('C')->getNumberFormat()->setFormatCode("0.00");
$table_columns1 = array("Account", "Name", "Amount");
$column1 = 0;
foreach($table_columns1 as $field1)
{
$object->getActiveSheet()->setCellValueByColumnAndRow($column1, 1, $field1);
$column1++;
}
}
// List of column names
$style = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
)
);
$prestasi->getDefaultStyle()->applyFromArray($style);
if($glnames == 'gl1') {
// Gl1 Query
$excel_row = 2;
for ($kk=0;$kk<count($account_number);$kk++)
{
$account_number2 = $account_number[$kk];
$gl1Arr = $this->ut_gl_model->getDisplayGl1Query($account_number2,$from_date1,$to_date1);
foreach($gl1Arr as $row)
{
$object->getActiveSheet()->setCellValueByColumnAndRow(0, $excel_row, $row['srl']);
$object->getActiveSheet()->setCellValueByColumnAndRow(1, $excel_row, $row['scheme']);
$object->getActiveSheet()->setCellValueByColumnAndRow(2, $excel_row, $row['tran_type']);
$object->getActiveSheet()->setCellValueByColumnAndRow(3, $excel_row, $row['app_refer']);
$object->getActiveSheet()->setCellValueByColumnAndRow(4, $excel_row, $row['oth_refer']);
$object->getActiveSheet()->setCellValueByColumnAndRow(5, $excel_row, $row['account']);
$object->getActiveSheet()->setCellValueByColumnAndRow(6, $excel_row, $row['name']);
$object->getActiveSheet()->setCellValueByColumnAndRow(7, $excel_row, (isset($row['value_date']) && $row['value_date']!='0000-00-00')?date('d/m/Y',strtotime($row['value_date'])):'');
$object->getActiveSheet()->setCellValueByColumnAndRow(8, $excel_row, $row['amt']);
$object->getActiveSheet()->setCellValueByColumnAndRow(9, $excel_row, $row['pay_catego']);
$object->getActiveSheet()->setCellValueByColumnAndRow(10, $excel_row, $row['rev_flg']);
$object->getActiveSheet()->setCellValueByColumnAndRow(11, $excel_row, $row['security']);
$object->getActiveSheet()->setCellValueByColumnAndRow(12, $excel_row, $row['chq_number']);
$object->getActiveSheet()->setCellValueByColumnAndRow(13, $excel_row, 'y');
$object->getActiveSheet()->setCellValueByColumnAndRow(14, $excel_row, (isset($row['book_date']) && $row['book_date']!='0000-00-00')?date('d/m/Y',strtotime($row['book_date'])):'');
$object->getActiveSheet()->setCellValueByColumnAndRow(15, $excel_row, (isset($row['chq_date']) && $row['chq_date']!='0000-00-00')?date('d/m/Y',strtotime($row['chq_date'])):'');
$object->getActiveSheet()->setCellValueByColumnAndRow(16, $excel_row, $row['reg_id']);
$object->getActiveSheet()->setCellValueByColumnAndRow(17, $excel_row, $row['inputter']);
$object->getActiveSheet()->setCellValueByColumnAndRow(18, $excel_row, $row['narration']);
$object->getActiveSheet()->setCellValueByColumnAndRow(19, $excel_row, '');
$object->getActiveSheet()->setCellValueByColumnAndRow(20, $excel_row, '');
$excel_row++;
}
}
// Excel Download Logic
$downloadFile = 'gl1_'.date('Ymd').'.xlsx';
$prestasi->setTitle("Gl1 Dump");
$object_writer = PHPExcel_IOFactory::createWriter($object, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$downloadFile.'" ');
$object_writer->save('php://output');
}
$excel_row1 = 2;
if($glnames == 'gl2') {
// Gl2 Query
for ($jj=0;$jj<count($account_number);$jj++)
{
$account_number3 = $account_number[$jj];
$gl2Arr = $this->ut_gl_model->getDisplayGl2Query($account_number3,$from_date1,$to_date1);
foreach($gl2Arr as $row1)
{
$object->getActiveSheet()->setCellValueByColumnAndRow(0, $excel_row1, $row1['account']);
$object->getActiveSheet()->setCellValueByColumnAndRow(1, $excel_row1, $row1['name']);
$object->getActiveSheet()->setCellValueByColumnAndRow(2, $excel_row1, $row1['amount']);
// $object->getActiveSheet()->setCellValueByColumnAndRow(3, $excel_row1, $row1['value_date']);
$excel_row1++;
}
}
// Excel Download Logic
$prestasi->setTitle("Gl2 Dump");
$downloadFile2 = 'gl2_'.date('Ymd').'.xlsx';
$object_writer = PHPExcel_IOFactory::createWriter($object, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$downloadFile2.'" ');
$object_writer->save('php://output');
}
}
else
{
$this->session->set_flashdata('error', 'Data not found.');
redirect(site_url('sbi-reco/run-gl'));
}
}
Встроенные библиотеки PHP не позволяют работать с форматами данных популярного табличного процессора Excel. За исключением текстового формата CSV (см. функции str_getcsv(), fputcsv()).
Решение этой задачи можно найти в рамках проекта PHPExcel.
Как известно, табличных форматов много. Библиотека поддерживает работу со многими экселевскими типами файлов и не только. Вот список поддерживаемых форматов:
- Excel5,
- Excel2003XML,
- Excel2007,
- OOCalc (Open Document Format),
- SYLK (Microsoft Multiplan Symbolic Link),
- Gnumeric,
- CSV.
Проект на GITHUB.
Работать с библиотекой очень просто, она бесплатна, открыта для использования и требует только PHP. Это позволяет обрабатывать табличные файлы (в том числе создавать и изменять) под любой операционной системой.
Загрузка XLS файла
В составе библиотеки находятся классы для работы со всеми из перечисленных типов, но наиболее популярен универсальный подход инициализации объекта через фабрику, которая сама определяет формат данных и создаёт объект нужного типа.
$inputFileName = ‘./sampleData/example1.xls’; /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); |
Дальше вы можете обратиться к определенной странице документа, нужной ячейке.
//выбрать первую страницу, показать значение ячейки ‘D5’ $objPHPExcel—>getSheet(0); $AC = $objPHPExcel—>getActiveSheet(); echo $AC—>getCell(‘D5’)—>getValue(); |
Создание, выгрузка XLS файла
Алгоритм действий следующий. После создания и работы с таблицей, используется фабрика объектов выгрузки:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5’); |
где определяется формат файла.
В качестве пункта назначения можно указать файл или консоль, если выгрузить требуется сразу пользователю в браузер.
<?php //здесь мы создаём таблицу $objPHPExcel и наполняем её данными //или правим существующий файл ... //выводим файл для скачки пользователем //формируем заголовки header(‘Content-Type: application/vnd.ms-excel’); header(‘Content-Disposition: attachment;filename=»myfile.xls»‘); header(‘Cache-Control: max-age=0’); //инициализируем объект через ферму для записи, //к примеру, в формате Excel5 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5’); //выводим XLS $objWriter—>save(‘php://output’); ?> |
Написать комментарий
Данная запись опубликована в 25.08.2017 21:20 и размещена в PHP.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Импорт материалов из Instagram
Август 27, 2018 г.
У instagram есть API, который устареет до конца 2018 года. Всех пересаживают на новую платформу — Instagram Graph API.
Регистрация приложения на этой …
Читать
К сожалению разработчики прекратили поддержку и разработку проекта, но PHPExcel все равно остается популярной библиотекой которая выполняет свои задачи, последняя версия нормально работает на PHP 7.
Проект на GitHub.
1
Создание документа
require_once __DIR__ . '/PHPExcel-1.8/Classes/PHPExcel.php';
require_once __DIR__ . '/PHPExcel-1.8/Classes/PHPExcel/Writer/Excel2007.php';
$xls = new PHPExcel();
PHP
Если нужно открыть существующий файл:
require_once __DIR__ . '/PHPExcel-1.8/Classes/PHPExcel.php';
require_once __DIR__ . '/PHPExcel-1.8/Classes/PHPExcel/Writer/Excel2007.php';
require_once __DIR__ . '/PHPExcel-1.8/Classes/PHPExcel/IOFactory.php';
$xls = PHPExcel_IOFactory::load(__DIR__ . '/file.xlsx');
PHP
Установка сводки документа:
$xls->getProperties()->setTitle("Название");
$xls->getProperties()->setSubject("Тема");
$xls->getProperties()->setCreator("Автор");
$xls->getProperties()->setManager("Руководитель");
$xls->getProperties()->setCompany("Организация");
$xls->getProperties()->setCategory("Группа");
$xls->getProperties()->setKeywords("Ключевые слова");
$xls->getProperties()->setDescription("Примечания");
$xls->getProperties()->setLastModifiedBy("Автор изменений");
$xls->getProperties()->setCreated("25.03.2019");
PHP
Защита книги паролем:
$xls->getActiveSheet()->getProtection()->setSheet(true);
$xls->getActiveSheet()->getProtection()->setSort(true);
$xls->getActiveSheet()->getProtection()->setInsertRows(true);
$xls->getActiveSheet()->getProtection()->setFormatCells(true);
$xls->getActiveSheet()->getProtection()->setPassword('123456');
PHP
Создаем новый лист, далее работаем с ним через переменную $sheet
.
$xls->setActiveSheetIndex(0);
$sheet = $xls->getActiveSheet();
$sheet->setTitle('Название листа');
PHP
Параметры печати
// Формат
$sheet->getPageSetup()->SetPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
// Ориентация
// ORIENTATION_PORTRAIT — книжная
// ORIENTATION_LANDSCAPE — альбомная
$sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
// Поля
$sheet->getPageMargins()->setTop(1);
$sheet->getPageMargins()->setRight(0.75);
$sheet->getPageMargins()->setLeft(0.75);
$sheet->getPageMargins()->setBottom(1);
// Верхний колонтитул
$sheet->getHeaderFooter()->setOddHeader("Название листа");
// Нижний колонтитул
$sheet->getHeaderFooter()->setOddFooter('&L&B Название листа &R Страница &P из &N');
PHP
Запись в ячейку и ее формат
$sheet->setCellValue("A1", "Значение");
PHP
Формат ячеек определяется автоматически, иногда это вызывает проблемы. Например, значения 1.
, 10.0
, 0.1
выведутся как 1
, 10
, 0,1
. Чтобы это исправить нужно использовать метод setCellValueExplicit()
в место setCellValue()
.
$sheet->setCellValueExplicit("A1", '1.', PHPExcel_Cell_DataType::TYPE_STRING);
$sheet->setCellValueExplicit("A2", '10.0', PHPExcel_Cell_DataType::TYPE_STRING);
$sheet->setCellValueExplicit("A3", '0.1', PHPExcel_Cell_DataType::TYPE_STRING);
PHP
2
Размеры ячеек
Ширина столбцов
// Ширина столбца A
$sheet->getColumnDimension("A")->setWidth(100);
// Авто ширина колонки по содержимому
$sheet->getColumnDimensionByColumn("A")->setAutoSize(true);
PHP
Высота строк
// Высота 1-й строки
$sheet->getRowDimension("1")->setRowHeight(50);
PHP
Вставленный в ячейку длинный текст будет выходить за ее пределы, переносы rn
работать не будут.
$sheet->setCellValue("A1", "Excel — программа rn для работы с электронными таблицами");
PHP
Метод setWrapText(true)
включает переносы строк и авто высоту.
$sheet->setCellValue("A1", "Excel — программа rn для работы с электронными таблицами");
$sheet->getStyle("A1")->getAlignment()->setWrapText(true);
PHP
3
Объединение ячеек
// Объединение ячеек в колонке
$sheet->mergeCells("A1:A6");
$sheet->setCellValue("A1", "A1:A6");
// Объединение ячеек в строке
$sheet->mergeCells("C2:I2");
$sheet->setCellValue("C2", "C2:I2");
// Объединение ячеек по диапазону
$sheet->mergeCells("C4:I6");
$sheet->setCellValue("C4", "C4:I6");
PHP
4
Стили текста
// Шрифт Times New Roman
$sheet->getStyle('A1')->getFont()->setName('Times New Roman');
// Размер шрифта 18
$sheet->getStyle("A2")->getFont()->setSize(18);
// Цвет шрифта
$sheet->getStyle("A3")->getFont()->getColor()->setRGB('ff0000');
// Жирный
$sheet->getStyle("A4")->getFont()->setBold(true);
// Курсив
$sheet->getStyle("A5")->getFont()->setItalic(true);
// Подчеркнутый текст
$sheet->getStyle("A6")->getFont()->setUnderline(true);
// Зачеркнутый текст
$sheet->getStyle("A7")->getFont()->setStrikethrough(true);
PHP
Также можно задать сразу несколько стилей для ячейки, массивом:
$style = array(
'font' => array(
'name' => 'Times New Roman',
'size' => 18,
'color' => array('rgb' => 'FF0000'),
'bold' => true,
'italic' => true,
'underline' => true,
'strike' => true,
)
);
$sheet->getStyle('A1')->applyFromArray($style);
PHP
Установить стили шрифта для всего документа:
$sheet->getDefaultStyle()->getFont()->setName('Times New Roman');
$sheet->getDefaultStyle()->getFont()->setSize(18);
PHP
Или:
$style = array(
'font' => array(
'name' => 'Times New Roman',
'size' => 18,
)
);
$sheet->getDefaultStyle()->applyFromArray($style);
PHP
5
Выравнивание в ячейке
По горизонтали:
// По левому краю
$sheet->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
// По центру
$sheet->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// По правому краю
$sheet->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
PHP
По вертикали:
// Сверху
$sheet->getStyle("A1")->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP);
// По центру
$sheet->getStyle("A1")->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
// Снизу
$sheet->getStyle("A1")->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_BOTTOM);
PHP
6
Фон ячейки
Стили фона устанавливаются массивом значений, type
– определяет стиль заливки, далее в зависимости от выбранного стиля задаются его настройки в параметрах color
, startcolor
, endcolor
, rotation
.
PHPExcel_Style_Fill::FILL_SOLID
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => '01B050')
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
'rotation' => 90
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_GRADIENT_PATH
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_GRADIENT_PATH,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKUP
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKUP,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_GRAY125
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_GRAY125,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY
$bg = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY,
'startcolor' => array('rgb' => '01B050'),
'endcolor' => array('rgb' => 'f1ee3b'),
)
);
$sheet->getStyle("B2")->applyFromArray($bg);
PHP
7
Границы
Стили линий задаются костантами:
Вид | Константа |
---|---|
PHPExcel_Style_Border::BORDER_NONE | |
PHPExcel_Style_Border::BORDER_THIN | |
PHPExcel_Style_Border::BORDER_MEDIUM | |
PHPExcel_Style_Border::BORDER_THICK | |
PHPExcel_Style_Border::BORDER_DOUBLE | |
PHPExcel_Style_Border::BORDER_HAIR | |
PHPExcel_Style_Border::BORDER_DOTTED | |
PHPExcel_Style_Border::BORDER_DASHED | |
PHPExcel_Style_Border::BORDER_DASHDOT | |
PHPExcel_Style_Border::BORDER_DASHDOTDOT | |
PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT | |
PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT | |
PHPExcel_Style_Border::BORDER_MEDIUMDASHED | |
PHPExcel_Style_Border::BORDER_SLANTDASHDOT |
Внешняя рамка у ячеек
$border = array(
'borders'=>array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
),
)
);
$sheet->getStyle("B2:J5")->applyFromArray($border);
PHP
Внутриния рамка у ячеек
$border = array(
'borders'=>array(
'inside' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
),
)
);
$sheet->getStyle("B2:J5")->applyFromArray($border);
PHP
Таблица
$border = array(
'borders'=>array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
)
)
);
$sheet->getStyle("B2:J5")->applyFromArray($border);
PHP
Таблица с жирной рамкой
$border = array(
'borders'=>array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THICK,
'color' => array('rgb' => '000000')
),
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
)
)
);
$sheet->getStyle("B2:J5")->applyFromArray($border);
PHP
Отдельные линии
case '':
case 'bottom':
case 'diagonal':
case 'horizontal':
case '':
case 'left':
case '':
case 'right':
case 'top':
case 'vertical':
Сверху:
$border = array(
'borders'=>array(
'top' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
)
)
);
$sheet->getStyle("B2")->applyFromArray($border);
PHP
Снизу:
$border = array(
'borders'=>array(
'bottom' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
)
)
);
$sheet->getStyle("B4")->applyFromArray($border);
PHP
Слева:
$border = array(
'borders'=>array(
'left' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
)
)
);
$sheet->getStyle("B6")->applyFromArray($border);
PHP
Справа:
$border = array(
'borders'=>array(
'right' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => '000000')
)
)
);
$sheet->getStyle("B8")->applyFromArray($border);
PHP
8
Изображения
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setResizeProportional(false);
$objDrawing->setName('Название картинки');
$objDrawing->setDescription('Описание картинки');
$objDrawing->setPath(__DIR__ . '/logo.png');
$objDrawing->setCoordinates('B2');
$objDrawing->setOffsetX(10);
$objDrawing->setOffsetY(10);
$objDrawing->setWidth(163);
$objDrawing->setHeight(50);
$objDrawing->setWorksheet($sheet);
PHP
9
$sheet->setCellValue("A1", "Ссылка на example.com");
$sheet->getCell("A1")->getHyperlink()->setUrl("http://example.com");
$sheet->getCell("A1")->getHyperlink()->setTooltip('Подсказка');
// У текста нужно сделать синий цвет и подчеркивание
$sheet->getStyle("A1")->applyFromArray(
array(
'font' => array(
'color' => array(
'rgb' => '0000FF'
),
'underline' => 'single'
)
)
);
PHP
10
Формулы
Русские названия функций не поддерживаются, придется использовать латинские аналоги.
$sheet->setCellValue("A3", "=SUM(A1:A2)");
PHP
СУММ | SUM | Cуммирование значений в ячейках |
ЕСЛИ | IF | Условие |
ПРОСМОТР | LOOKUP | Поиск по значению |
ВПР | VLOOKUP | Поиск значения по диапазону |
ПОИСКПОЗ | MATCH | Поиск положенияв диапазоне ячеек |
ВЫБОР | CHOOSE | Выбор одного значения из списка |
ДАТА | DATE | Возвращает порядковый номер определенной даты |
ДНИ | DAYS | Возвращает число дней между двумя датами |
НАЙТИ, НАЙТИБ | FIND, FINDB | Поиск вхождения одной строки в другую |
ИНДЕКС | INDEX | Возвращает значение или ссылку на него из таблицы или диапазона |
11
Сохранение
XLSX
Отдача на скачивание:
header("Expires: Mon, 1 Apr 1974 05:00:00 GMT");
header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment; filename=file.xlsx");
$objWriter = new PHPExcel_Writer_Excel2007($xls);
$objWriter->save('php://output');
exit();
PHP
Если возникает ошибка – «Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file php://output.'
», то следует сделать скачивание через временный файл:
header("Expires: Mon, 1 Apr 1974 05:00:00 GMT");
header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment; filename=file.xlsx");
$file_path = __DIR__ . "/xlsx.tmp";
$objWriter = new PHPExcel_Writer_Excel2007($xls);
$objWriter->save($file_path);
readfile($file_path);
unlink($file_path);
exit();
PHP
Сохранение в файл:
$objWriter = new PHPExcel_Writer_Excel2007($xls);
$objWriter->save(__DIR__ . '/file.xlsx');
PHP
XLS (Excel 97-2004)
Отдача на скачивание:
header("Expires: Mon, 1 Apr 1974 05:00:00 GMT");
header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=file.xls");
$objWriter = new PHPExcel_Writer_Excel5($xls);
$objWriter->save('php://output');
exit();
PHP
Сохранение в файл:
$objWriter = new PHPExcel_Writer_Excel5($xls);
$objWriter->save(__DIR__ . '/file.xls');
PHP
PHPExcel — библиотека для создания и чтения данных из файлов формата OpenXML (который используется в MS Excel 2007). С ее помощью можно считывать из файлов, записывать в файлы, форматировать содержимое, работать с формулами и т.д. Для работы PHPExcel требуется версия PHP 5.2 или выше, с установленными библиотеками Zip, XML и GD2.
Установка PHPExcel
Первым делом библиотеку необходимо скачать. Для этого переходим на официальный сайт библиотеки и скачиваем архив PHPExcel-1.7.8.zip. После распаковки мы получим несколько файлов и папок:
- Classes
- Documentation
- Tests
- changelog.txt
- install.txt
- license.txt
Файлы — это различные описания по предыдущим версиям, лицензионное соглашение и очень краткая инструкция по установке. Далее, в папке Classes, содержится непосредственно сама библиотека PHPExcel — эту папку необходимо скопировать в корень нашего скрипта.
В папке Documentation содержится документация по библиотеке на английском языке. В папке Tests — примеры по использованию библиотеки.
Создание Excel-файла
Итак, давайте создадим файл makeexcel.php и начинаем работать с ним. Для начала нам необходимо подключить главный файл библиотеки PHPExcel.php (который находится в папке Classes) и создать объект класса PHPExcel:
require_once 'Classes/PHPExcel.php'; $pExcel = new PHPExcel();
Настройки листа книги Excel
Документ Excel состоит из книг, а каждая книга в свою очередь, состоит из листов. Далее лист состоит из набора ячеек, доступ к которым осуществляется по координатам. То есть у нас есть столбцы, которые имеют буквенные имена (А, В, С и т.д) и есть строки, которые пронумерованы. Значит, что бы получить доступ к первой ячейке нужно указать код А1. Точно также мы с помощью библиотеки будем получать доступ к каждой ячейке.
Итак, первым делом необходимо выбрать активный лист, на который мы будем выводить данные и получить объект этого листа:
$pExcel->setActiveSheetIndex(0); $aSheet = $pExcel->getActiveSheet();
С помощью метода setActiveSheetIndex(0) указываем индекс (номер) активного листа. Нумерация листов начинается с нуля. Далее с помощью метода getActiveSheet() получаем объект этого активного листа, то есть другими словами получаем доступ к нему для работы. И сохраняем этот объект в переменную $aSheet.
Если Вы захотите указать активным какой то другой лист, то вначале его необходимо создать, при помощи метода:
$pExcel->createSheet();
Затем, по аналогии, указываем индекс и получаем объект активного листа.
// Ориентация страницы и размер листа $aSheet->getPageSetup() ->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); $aSheet->getPageSetup() ->SetPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); // Поля документа $aSheet->getPageMargins()->setTop(1); $aSheet->getPageMargins()->setRight(0.75); $aSheet->getPageMargins()->setLeft(0.75); $aSheet->getPageMargins()->setBottom(1); // Название листа $aSheet->setTitle('Прайс-лист'); // Шапка и футер (при печати) $aSheet->getHeaderFooter() ->setOddHeader('&CТД ТИНКО: прайс-лист'); $aSheet->getHeaderFooter() ->setOddFooter('&L&B'.$aSheet->getTitle().'&RСтраница &P из &N'); // Настройки шрифта $pExcel->getDefaultStyle()->getFont()->setName('Arial'); $pExcel->getDefaultStyle()->getFont()->setSize(8);
Вначале задаем ориентацию листа при помощи метода setOrientation(), которому передаем константу класса PHPExcel_Worksheet_PageSetup:
- ORIENTATION_PORTRAIT — книжная
- ORIENTATION_LANDSCAPE — альбомная
Обратите внимание, что перед методом setOrientation() необходимо вызвать метод getPageSetup(), который предоставляет доступ к настройкам страницы.
Далее вызываем метод SetPaperSize(), который позволяет задать размер страницы для печати. Ему передаем параметром константу PAPERSIZE_A4 класса PHPExcel_Worksheet_PageSetup. Что означает, что размер листа страницы будет установлен А4.
Далее устанавливаем поля документа, то есть отступы от краев документа. Отступы задаются в специальных символьных единицах. Вначале, обратите внимание, вызываем у объекта $aSheet метод getPageMargins(), который вернет объект класса, отвечающего за настройки полей страницы. Затем вызываем методы setTop(), setRight(), setLeft() и setBottom().
Далее при помощи метода setTitle(‘Прайс лист’) задаем название нашего листа.
Если нужно, можно при печати выводить шапку и подвал листа:
- setOddHeader();
- setOddFooter();
Обратите внимание на передаваемые параметры:
- для шапки передаем строку ‘&CТД ТИНКО: прайс-лист’; метка &C означает, что текст нужно расположить по центру.
- для подвала передаем строку ‘&L&B’.$aSheet->getTitle().’&RСтраница &P из &N’; это означает, что нужно вывести слева и жирным шрифтом (&L&B) название листа (метод $aSheet->getTitle()), затем справа (&R) вывести номер страницы (&P) из общего количества страниц (&N).
Затем указываем настройки шрифта по умолчанию:
- setName(‘Arial’) — задаем имя шрифта;
- setSize(8) — задаем размер шрифта.
Наполнение документа данными
Для начала давайте зададим ширину столбцов (в символьных единицах), которые нам понадобятся:
$aSheet->getColumnDimension('A')->setWidth(3); $aSheet->getColumnDimension('B')->setWidth(7); $aSheet->getColumnDimension('C')->setWidth(20); $aSheet->getColumnDimension('D')->setWidth(40); $aSheet->getColumnDimension('E')->setWidth(10);
Теперь заполним несколько ячеек текстом:
$aSheet->mergeCells('A1:E1'); $aSheet->getRowDimension('1')->setRowHeight(20); $aSheet->setCellValue('A1','ТД ТИНКО'); $aSheet->mergeCells('A2:E2'); $aSheet->setCellValue('A2','Поставка технических средств безопасности'); $aSheet->mergeCells('A4:C4'); $aSheet->setCellValue('A4','Дата создания прайс-листа');
Здесь мы сначала объеденяем ячейки с А1 до E1 при помощи метода mergeCells(), далее задаем высоту строки: вначале получаем доступ к строке 1 при помощи метода getRowDimension(‘1’), затем задаем высоту — setRowHeight(20). Далее при помощи метода setCellValue(‘A1′,’ТД ТИНКО’), устанавливаем значение ячейки А1.
Далее давайте в ячейку D4 запишем текущую дату:
// Записываем данные в ячейку $date = date('d-m-Y'); $aSheet->setCellValue('D4',$date); // Устанавливает формат данных в ячейке (дата вида дд-мм-гггг) $aSheet->getStyle('D4')->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14);
С помощью констант, определенных в классе PHPExcel_Style_NumberFormat, можно задать формат ячейки: FORMAT_GENERAL (общий), FORMAT_TEXT (текст), FORMAT_NUMBER (число), FORMAT_NUMBER_00 (число с дробной частью), FORMAT_PERCENTAGE (процент), FORMAT_PERCENTAGE_00 (процент с дробной частью) и т.п.
Теперь, используя метод setCellValue(), а также цикл while() наполним данными наш прайс-лист:
mysql_connect(DB_HOST, DB_USER, DB_PASS); mysql_query('SET NAMES utf8'); mysql_select_db(DB_NAME); // Создаем шапку таблички данных $aSheet->setCellValue('A6','№'); $aSheet->setCellValue('B6','Код'); $aSheet->setCellValue('C6','Наименование'); $aSheet->setCellValue('D6','Описание'); $aSheet->setCellValue('E6','Цена'); $query = "SELECT `code`, `name`, `description`, `price` FROM `products` WHERE 1 LIMIT 10"; $res = mysql_query( $query ); $i = 1; while( $prd = mysql_fetch_assoc($res) ) { $aSheet->setCellValue('A'.($i+6), $i); $aSheet->setCellValue('B'.($i+6), $prd['code']); $aSheet->setCellValue('C'.($i+6), $prd['name']); $aSheet->setCellValue('D'.($i+6), $prd['description']); $aSheet->setCellValue('E'.($i+6), $prd['price']); $i++; }
Стилизация данных
Давайте немного украсим наш прайс-лист, то есть каждой ячейке добавим стилей. Для этого необходимо создать массив со стилями и при помощи метода applyFromArray(), применить этот массив к ячейке (или ячейкам):
// массив стилей $style_wrap = array( // рамки 'borders'=>array( // внешняя рамка 'outline' => array( 'style'=>PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb'=>'006464' ) ), // внутренняя 'allborders'=>array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'CCCCCC' ) ) ) ); $aSheet->getStyle('A1:F'.($i+5))->applyFromArray($style_wrap);
Теперь, по аналогии, применим стили к остальным ячейкам:
// Стили для верхней надписи (первая строка) $style_header = array( // Шрифт 'font'=>array( 'bold' => true, 'name' => 'Times New Roman', 'size' => 15, 'color'=>array( 'rgb' => '006464' ) ), // Выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, 'vertical' => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ), // Заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => '99CCCC' ) ), 'borders'=>array( 'bottom'=>array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'006464' ) ) ) ); $aSheet->getStyle('A1:E1')->applyFromArray($style_header); // Стили для слогана компании (вторая строка) $style_slogan = array( // шрифт 'font'=>array( 'bold' => true, 'italic' => true, 'name' => 'Times New Roman', 'size' => 12, 'color'=>array( 'rgb' => '006464' ) ), // выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, 'vertical' => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ), // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => '99CCCC' ) ), //рамки 'borders' => array( 'bottom' => array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'006464' ) ) ) ); $aSheet->getStyle('A2:E2')->applyFromArray($style_slogan); // Стили для текта возле даты $style_tdate = array( // выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_RIGHT, ), // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'EEEEEE' ) ), // рамки 'borders' => array( 'right' => array( 'style'=>PHPExcel_Style_Border::BORDER_NONE ) ) ); $aSheet->getStyle('A4:D4')->applyFromArray($style_tdate); // Стили для даты $style_date = array( // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'EEEEEE' ) ), // рамки 'borders' => array( 'left' => array( 'style'=>PHPExcel_Style_Border::BORDER_NONE ) ), ); $aSheet->getStyle('E4')->applyFromArray($style_date); // Стили для шапки таблицы (шестая строка) $style_hprice = array( // выравнивание 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, ), // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'CFCFCF' ) ), // шрифт 'font'=>array( 'bold' => true, /* 'italic' => true, */ 'name' => 'Times New Roman', 'size' => 10 ), ); $aSheet->getStyle('A6:E6')->applyFromArray($style_hprice); // Cтили для данных в таблице прайс-листа $style_price = array( 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_LEFT, ) ); $aSheet->getStyle('A7:E'.($i+5))->applyFromArray($style_price);
Сохранение документа
Осталось только сохранить наш документ:
/* $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel5'); $objWriter->save('simple.xls'); */ $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel2007'); $objWriter->save('simple.xlsx');
или так
/* $objWriter = new PHPExcel_Writer_Excel5($pExcel); $objWriter->save('simple.xls'); */ $objWriter = new PHPExcel_Writer_Excel2007($pExcel); $objWriter->save('simple.xlsx');
Если нужно вывести документ в браузер
/* header('Content-Type:application/vnd.ms-excel'); header('Content-Disposition:attachment;filename="simple.xls"'); $objWriter = new PHPExcel_Writer_Excel5($pExcel); */ header('Content-Type:xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition:attachment;filename="simple.xlsx"'); $objWriter = new PHPExcel_Writer_Excel2007($pExcel); $objWriter->save('php://output');
Первый заголовок указывает браузеру тип открываемого контента — это документ формата Excel. Второй — говорит браузеру, что документ необходимо отдать пользователю на скачивание под именем simple.xlsx.
Добавление формул
Формула Excel — это математическое выражение, которое создается для вычисления результата и которое может зависеть от содержимого других ячеек. Формула в ячейке Excel может содержать данные, ссылки на другие ячейки, а также обозначение действий, которые необходимо выполнить.
Использование ссылок на ячейки позволяет пересчитывать результат по формулам, когда происходят изменения содержимого ячеек, включенных в формулы. Формулы Excel начинаются со знака =. Скобки ( ) могут использоваться для определения порядка математических операции.
Примеры формул Excel: =27+36, =А1+А2-АЗ, =SUM(А1:А5), =MAX(АЗ:А5), =(А1+А2)/АЗ.
PHPExcel тоже поддерживает добавление формул в ячейки. Установить формулу можно так:
// формула для вычисления суммы $formula = '=SUM(D2:D4)'; $aSheet->setCellValue('D5', $formula);
Чтение Excel-файла
Самый простой вариант — считать все таблицы (на всех листах) и записать данные в трехмерный массив:
// Подключаем библиотеку require_once 'Classes/PHPExcel.php'; $pExcel = PHPExcel_IOFactory::load('simple.xlsx'); // Цикл по листам Excel-файла foreach ($pExcel->getWorksheetIterator() as $worksheet) { // выгружаем данные из объекта в массив $tables[] = $worksheet->toArray(); }
Теперь можно вывести массив:
// Цикл по листам Excel-файла foreach( $tables as $table ) { echo '<table border="1">'; // Цикл по строкам foreach($table as $row) { echo '<tr>'; // Цикл по колонкам foreach( $row as $col ) { echo '<td>'.$col.'</td>'; } echo '</tr>'; } echo '</table>'; }
Для получения значения отдельной ячейки:
// выбираем лист, с которым будем работать $pExcel->setActiveSheetIndex(0); $aSheet = $pExcel->getActiveSheet(); // получаем доступ к ячейке по номеру строки // (нумерация с единицы) и столбца (нумерация с нуля) $cell = $aSheet->getCellByColumnAndRow($col, $row); // читаем значение ячейки $value = $cell->getValue()
или так:
$value = $pExcel->getActiveSheet()->getCellValue('B2')
Еще два примера:
// Цикл по листам Excel-файла foreach( $pExcel->getWorksheetIterator() as $worksheet ) { echo '<h2>Лист «'.$worksheet->getTitle().'»</h2>'; echo '<table border="1">'; // Цикл по строкам foreach( $worksheet->getRowIterator() as $row ) { echo '<tr>'; // Цикл по колонкам foreach( $row->getCellIterator() as $cell ) { $value = $cell->getValue(); // $calcValue = $cell->getCalculatedValue() // $dataType = PHPExcel_Cell_DataType::dataTypeForValue($value); echo '<td>'.$value.'</td>'; } echo '</tr>'; } echo '</table>'; }
// Цикл по листам Excel-файла foreach ($pExcel->getWorksheetIterator() as $worksheet) { $worksheetTitle = $worksheet->getTitle(); $highestRow = $worksheet->getHighestRow(); // например, 10 $highestColumn = $worksheet->getHighestColumn(); // например, 'E' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $nrColumns = ord($highestColumn) - 64; echo '<h2>Лист «'.$worksheetTitle.'» '; echo $nrColumns . ' колонок (A-' . $highestColumn . ') '; echo ' и ' . $highestRow . ' строк.</h2>'; echo '<table border="1">'; // Цикл по строкам for ($row = 1; $row <= $highestRow; $row++) { echo '<tr>'; // Цикл по колонкам for ($col = 0; $col < $highestColumnIndex; $col++) { $cell = $worksheet->getCellByColumnAndRow($col, $row); echo '<td>'.$cell->getValue().'</td>'; } echo '</tr>'; } echo '</table>'; }
Дополнительно
- Документация разработчика PHPExcel на русском
- Блог на Laravel 7, часть 17. Временная зона для пользователей, деплой на хостинг TimeWeb
- Блог на Laravel 7, часть 16. Роль нового пользователя, сообщение админу о новом посте
- Блог на Laravel 7, часть 15. Восстановление постов, slug для категории, поста и страницы
- Блог на Laravel 7, часть 14. Валидация данных и права доступа при загрузке изображений
- Блог на Laravel 7, часть 13. Загрузка и ресайз изображений для категорий и постов блога
- Блог на Laravel 7, часть 12. Доп.страницы сайта в панели управления и в публичной части
- Блог на Laravel 7, часть 11. Панель управления — назначение ролей и прав для пользователей
Поиск:
Excel • MS • PHP • Web-разработка
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.