К сожалению разработчики прекратили поддержку и разработку проекта, но 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
Do you know how can I set the cell type before writing a value in it? I would like to be able to set types like «General», «Text» and «Number».
Thank you.
asked Jun 17, 2013 at 8:24
When the text is a number with leading zeros, then do:
(Cuando el texto es un número que empieza por ceros, hacer)
$objPHPExcel->getActiveSheet()->setCellValueExplicit('A1', $val,PHPExcel_Cell_DataType::TYPE_STRING);
answered Sep 24, 2015 at 15:12
FelipeRFelipeR
4654 silver badges3 bronze badges
The same way as you’d set the type (number format mask) after writing a value to it:
$objPHPExcel->getActiveSheet()
->getStyle('A1')
->getNumberFormat()
->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_GENERAL
);
or
$objPHPExcel->getActiveSheet()
->getStyle('A1')
->getNumberFormat()
->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_TEXT
);
Though «Number» isn’t a valid format mask.
You can find a list of pre-defined format masks in Classes/PHPExcel/Style/NumberFormat.php or set the value to any valid Excel number format masking string.
answered Jun 17, 2013 at 9:55
Mark BakerMark Baker
208k31 gold badges340 silver badges383 bronze badges
2
try this
$currencyFormat = '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)';
$textFormat='@';//'General','0.00','@'
$excel->getActiveSheet()->getStyle('B1')->getNumberFormat()->setFormatCode($currencyFormat);
$excel->getActiveSheet()->getStyle('C1')->getNumberFormat()->setFormatCode($textFormat);`
richsage
26.8k8 gold badges57 silver badges65 bronze badges
answered May 7, 2015 at 23:32
Followed Mark’s advise and did this to set the default number formatting to text in the whole workbook:
$objPHPExcel = new PHPExcel();
$objPHPExcel->getDefaultStyle()
->getNumberFormat()
->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_TEXT
);
And it works flawlessly. Thank you, Mark Baker.
answered Dec 1, 2017 at 15:51
Lucio MollinedoLucio Mollinedo
2,2051 gold badge30 silver badges27 bronze badges
I wanted the Number same as I get from database for example.
-
00100.220000
-
00123
-
0000.0000100
So I modified the code as below
$objPHPExcel->getActiveSheet()
->setCellValue('A3', '00100.220000');
$objPHPExcel->getActiveSheet()
->getStyle('A3')
->getNumberFormat()
->setFormatCode('00000.000000');
$objPHPExcel->getActiveSheet()
->setCellValue('A4', '00123');
$objPHPExcel->getActiveSheet()
->getStyle('A4')
->getNumberFormat()
->setFormatCode('00000');
$objPHPExcel->getActiveSheet()
->setCellValue('A5', '0000.0000100');
$objPHPExcel->getActiveSheet()
->getStyle('A5')
->getNumberFormat()
->setFormatCode('0000.0000000');
gam6itko
14.8k2 gold badges19 silver badges18 bronze badges
answered Dec 11, 2017 at 11:13
Pavan PyatiPavan Pyati
9082 gold badges13 silver badges18 bronze badges
For Numbers with leading zeroes and comma separated:
You can put ‘A’ to affect the entire column’.
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
Then you can write to the cell as you normally would.
PowerStat
3,7818 gold badges33 silver badges56 bronze badges
answered Jun 26, 2019 at 6:58
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.
Formating Cell
$objPHPExcel->getActiveSheet()->getStyle('B2') ->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); $objPHPExcel->getActiveSheet()->getStyle('B2') ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);<!--more--> $objPHPExcel->getActiveSheet()->getStyle('B2') ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objPHPExcel->getActiveSheet()->getStyle('B2') ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objPHPExcel->getActiveSheet()->getStyle('B2') ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objPHPExcel->getActiveSheet()->getStyle('B2') ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objPHPExcel->getActiveSheet()->getStyle('B2') ->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle('B2') ->getFill()->getStartColor()->setARGB('FFFF0000'); <div>
Number Format
$objPHPExcel->getActiveSheet()->getStyle('A1') ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
For more Featore : https://github.com/PHPOffice/PHPExcel/blob/develop/Examples/05featuredemo.inc.php
<script src=»https://gist.github.com/910370.js»></script>
// Create new PHPExcel object echo date('H:i:s') . " Create new PHPExcel objectn"; $objPHPExcel = new PHPExcel(); // Set properties echo date('H:i:s') . " Set propertiesn"; $objPHPExcel->getProperties()->setCreator("Vikas Tharyani") ->setLastModifiedBy("Vikas Tharyani") ->setTitle($CompanyName) ->setSubject("General Leger Report") ->setDescription("Test") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); //Add Data $heading = sprintf("%s To %s",$FromDate,$ToDate); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('D1', $CompanyName); $objPHPExcel->getActiveSheet()->setCellValue('D2', 'GeneralLedger'); $objPHPExcel->getActiveSheet()->setCellValue('D3', $heading); $objPHPExcel->getActiveSheet()->setCellValue('A4', 'AccountId'); $objPHPExcel->getActiveSheet()->setCellValue('A5', 'Opening Balance'); $objPHPExcel->getActiveSheet()->setCellValue('B4', $FromAccid); $objPHPExcel->getActiveSheet()->setCellValue('b5', $OpeningBalance); $objPHPExcel->getActiveSheet()->setCellValue('A7', 'Date'); $objPHPExcel->getActiveSheet()->setCellValue('C7', 'Particulars'); $objPHPExcel->getActiveSheet()->setCellValue('E7', 'VoucherType'); $objPHPExcel->getActiveSheet()->setCellValue('G7', 'VoucherNo'); $objPHPExcel->getActiveSheet()->setCellValue('I7', 'Debit'); $objPHPExcel->getActiveSheet()->setCellValue('K7', 'Credit'); //Add data using database $i = 8; $j = 1; $querry7 = "select * from GLTRANSACTIONS where ACCOUNT_ID = 'G0003'"; $res7 = odbc_exec($conn,$querry7); while(odbc_fetch_row($res7)) { if($j%2 == 0) { $Refrenceno = sprintf('C%d',$i); $RefrencenoVal = sprintf('D%d',$i); $Refrencedate = sprintf('E%d',$i); $RefrenceDateVal = sprintf('F%d',$i); $chequeNo = sprintf('C%d',$i+1); $chequeNoval = sprintf('D%d',$i+1); $chequeDate = sprintf('E%d',$i+1); $chequeDateVal = sprintf('F%d',$i+1); $objPHPExcel->getActiveSheet()->setCellValue($Refrenceno, 'RefrenceNo'); $objPHPExcel->getActiveSheet()->setCellValue($RefrencenoVal,odbc_result($res7,'REF_NO')); $objPHPExcel->getActiveSheet()->setCellValue($Refrencedate, 'RefrenceDate'); $objPHPExcel->getActiveSheet()->setCellValue($RefrenceDateVal,odbc_result($res7,'REF_DATE')); $objPHPExcel->getActiveSheet()->setCellValue($Refrencedate, 'ChequeNo'); $objPHPExcel->getActiveSheet()->setCellValue($RefrenceDateVal,odbc_result($res7,'CHEQUE_NO')); $objPHPExcel->getActiveSheet()->setCellValue($Refrencedate, 'ChequeDate'); $objPHPExcel->getActiveSheet()->setCellValue($RefrenceDateVal,odbc_result($res7,'CHEQUE_DATE')); $objPHPExcel->getActiveSheet()->getStyle($Refrenceno)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($RefrencenoVal)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($Refrencedate)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($RefrenceDateVal)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($chequeNo)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($chequeNoval)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($chequeDate)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($chequeDateVal)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $i = $i+2; } else { $cellindexcol1 = sprintf('A%d',$i); $cellindexcol2 = sprintf('C%d',$i); $cellindexcol3 = sprintf('E%d',$i); $cellindexcol4 = sprintf('G%d',$i); $cellindexcol5 = sprintf('I%d',$i); $cellindexcol6 = sprintf('K%d',$i); $objPHPExcel->getActiveSheet()->setCellValue($cellindexcol1, odbc_result($res7,'TR_DATE')); $objPHPExcel->getActiveSheet()->setCellValue($cellindexcol2, odbc_result($res7,'TR_DESCRIPTION')); $objPHPExcel->getActiveSheet()->setCellValue($cellindexcol3, odbc_result($res7,'VOUCHER_TYPE')); $objPHPExcel->getActiveSheet()->setCellValue($cellindexcol4, odbc_result($res7,'TRANSACTION_ID')); $objPHPExcel->getActiveSheet()->setCellValue($cellindexcol5, odbc_result($res7,'WITHDRAW_AMOUNT')); $objPHPExcel->getActiveSheet()->setCellValue($cellindexcol6, odbc_result($res7,'DEPOSIT_AMOUNT')); //for alignment $objPHPExcel->getActiveSheet()->getStyle($cellindexcol1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); $objPHPExcel->getActiveSheet()->getStyle($cellindexcol2)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY); $objPHPExcel->getActiveSheet()->getStyle($cellindexcol3)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle($cellindexcol4)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle($cellindexcol5)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle($cellindexcol6)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); } $j++; $i++; } // Set column widths echo date('H:i:s') . " Set column widthsn"; $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(true); $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(true); $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(true); $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(true); // Merge cells echo date('H:i:s') . " Merge cellsn"; $objPHPExcel->getActiveSheet()->mergeCells('D1:E1'); // Set fonts echo date('H:i:s') . " Set fontsn"; $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(20); $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('D2')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('D2')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('D2')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('D2')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('D2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('D3')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('D3')->getFont()->setSize(10); $objPHPExcel->getActiveSheet()->getStyle('D3')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('D3')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('D3')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('B4')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('B4')->getFont()->setSize(10); $objPHPExcel->getActiveSheet()->getStyle('B4')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('B4')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('B4')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('A7')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('A7')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('A7')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('A7')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('A7')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('C7')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('C7')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('C7')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('C7')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('C7')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('E7')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('E7')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('E7')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('E7')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('E7')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('G7')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('G7')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('G7')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('G7')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('G7')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('I7')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('I7')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('I7')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('I7')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('I7')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); $objPHPExcel->getActiveSheet()->getStyle('K7')->getFont()->setName('Arial'); $objPHPExcel->getActiveSheet()->getStyle('K7')->getFont()->setSize(12); $objPHPExcel->getActiveSheet()->getStyle('K7')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('K7')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('K7')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); // Set thin black border outline around column $borderindex = sprintf('A1:K%d',$i); echo date('H:i:s') . " Set thin black border outline around columnn"; $styleThinBlackBorderOutline = array( 'borders' => array( 'outline' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => 'FF000000'), ), ), ); $objPHPExcel->getActiveSheet()->getStyle($borderindex)->applyFromArray($styleThinBlackBorderOutline); // Set alignments echo date('H:i:s') . " Set alignmentsn"; $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'HTML'); $objWriter->setSheetIndex(0); $objWriter->save(str_replace('.php', '.htm', __FILE__)); // Echo memory peak usage echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MBrn"; // Echo done echo date('H:i:s') . " Done writing files.rn";
Last Update: 16/12/2017
Posted by: müslüm ÇEN
PHPExcel Developer Documentation
Accessing cells in a PHPExcel worksheet should be pretty straightforward. This topic lists some of the options to access a cell.
Setting a cell value by coordinate
Setting a cell value by coordinate can be done using the worksheet’s setCellValue()
method.
// Set cell A1 with a string value $objPHPExcel->getActiveSheet()->setCellValue('A1', 'PHPExcel'); // Set cell A2 with a numeric value $objPHPExcel->getActiveSheet()->setCellValue('A2', 12345.6789); // Set cell A3 with a boolean value $objPHPExcel->getActiveSheet()->setCellValue('A3', TRUE); // Set cell A4 with a formula $objPHPExcel->getActiveSheet()->setCellValue( 'A4', '=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))' );
Alternatively, you can retrieve the cell object, and then call the cell’s setValue() method:
$objPHPExcel->getActiveSheet() ->getCell('B8') ->setValue('Some value');
Excel DataTypes
MS Excel supports 7 basic datatypes
- string
- number
- boolean
- null
- formula
- error
- Inline (or rich text) string
By default, when you call the worksheet’s setCellValue()
method or the cell’s setValue()
method, PHPExcel will use the appropriate datatype for PHP nulls, booleans, floats or integers; or cast any string data value that you pass to the method into the most appropriate datatype, so numeric strings will be cast to numbers, while string values beginning with “=” will be converted to a formula. Strings that aren’t numeric, or that don’t begin with a leading «=» will be treated as genuine string values.
This «conversion» is handled by a cell «value binder», and you can write custom «value binders» to change the behaviour of these «conversions». The standard PHPExcel package also provides an «advanced value binder» that handles a number of more complex conversions, such as converting strings with a fractional format like «3/4» to a number value (0.75 in this case) and setting an appropriate «fraction» number format mask. Similarly, strings like «5%» will be converted to a value of 0.05, and a percentage number format mask applied, and strings containing values that look like dates will be converted to Excel serialized datetimestamp values, and a corresponding mask applied. This is particularly useful when loading data from csv files, or setting cell values from a database.
Formats handled by the advanced value binder include
- TRUE or FALSE (dependent on locale settings) are converted to booleans.
- Numeric strings identified as scientific (exponential) format are converted to numbers.
- Fractions and vulgar fractions are converted to numbers, and an appropriate number format mask applied.
- Percentages are converted to numbers, divided by 100, and an appropriate number format mask applied.
- Dates and times are converted to Excel timestamp values (numbers), and an appropriate number format mask applied.
- When strings contain a newline character («n»), then the cell styling is set to wrap.
You can read more about value binders later in this section of the documentation.
Setting a date and/or time value in a cell
Date or time values are held as timestamp in Excel (a simple floating point value), and a number format mask is used to show how that value should be formatted; so if we want to store a date in a cell, we need to calculate the correct Excel timestamp, and set a number format mask.
// Get the current date/time and convert to an Excel date/time $dateTimeNow = time(); $excelDateValue = PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ); // Set cell A6 with the Excel date/time value $objPHPExcel->getActiveSheet()->setCellValue( 'A6', $excelDateValue ); // Set the number format mask so that the excel timestamp will be displayed as a human-readable date/time $objPHPExcel->getActiveSheet()->getStyle('A6') ->getNumberFormat() ->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME );
Setting a number with leading zeroes
By default, PHPExcel will automatically detect the value type and set it to the appropriate Excel numeric datatype. This type conversion is handled by a value binder, as described in the section of this document entitled «Using value binders to facilitate data entry».
Numbers don’t have leading zeroes, so if you try to set a numeric value that does have leading zeroes (such as a telephone number) then these will be normally be lost as the value is cast to a number, so «01513789642» will be displayed as 1513789642.
There are two ways you can force PHPExcel to override this behaviour.
Firstly, you can set the datatype explicitly as a string so that it is not converted to a number.
// Set cell A8 with a numeric value, but tell PHPExcel it should be treated as a string $objPHPExcel->getActiveSheet()->setCellValueExplicit( 'A8', "01513789642", PHPExcel_Cell_DataType::TYPE_STRING );
Alternatively, you can use a number format mask to display the value with leading zeroes.
// Set cell A9 with a numeric value $objPHPExcel->getActiveSheet()->setCellValue('A9', 1513789642); // Set a number format mask to display the value as 11 digits with leading zeroes $objPHPExcel->getActiveSheet()->getStyle('A9') ->getNumberFormat() ->setFormatCode( '00000000000' );
With number format masking, you can even break up the digits into groups to make the value more easily readable.
// Set cell A10 with a numeric value $objPHPExcel->getActiveSheet()->setCellValue('A10', 1513789642); // Set a number format mask to display the value as 11 digits with leading zeroes $objPHPExcel->getActiveSheet()->getStyle('A10') ->getNumberFormat() ->setFormatCode( '0000-000-0000' );
Note that not all complex format masks such as this one will work when retrieving a formatted value to display «on screen», or for certain writers such as HTML or PDF, but it will work with the true spreadsheet writers (Excel2007 and Excel5).
Setting a range of cells from an array
It is also possible to set a range of cell values in a single call by passing an array of values to the fromArray()
method.
$arrayData = array( array(NULL, 2010, 2011, 2012), array('Q1', 12, 15, 21), array('Q2', 56, 73, 86), array('Q3', 52, 61, 69), array('Q4', 30, 32, 0), ); $objPHPExcel->getActiveSheet() ->fromArray( $arrayData, // The data to set NULL, // Array values with this value will not be set 'C3' // Top left coordinate of the worksheet range where // we want to set these values (default is A1) );
If you pass a 2-d array, then this will be treated as a series of rows and columns. A 1-d array will be treated as a single row, which is particularly useful if you’re fetching an array of data from a database.
$rowArray = array('Value1', 'Value2', 'Value3', 'Value4'); $objPHPExcel->getActiveSheet() ->fromArray( $rowArray, // The data to set NULL, // Array values with this value will not be set 'C3' // Top left coordinate of the worksheet range where // we want to set these values (default is A1) );
If you have a simple 1-d array, and want to write it as a column, then the following will convert it into an appropriately structured 2-d array that can be fed to the fromArray()
method:
$rowArray = array('Value1', 'Value2', 'Value3', 'Value4'); $columnArray = array_chunk($rowArray, 1); $objPHPExcel->getActiveSheet() ->fromArray( $columnArray, // The data to set NULL, // Array values with this value will not be set 'C3' // Top left coordinate of the worksheet range where // we want to set these values (default is A1) );
Retrieving a cell value by coordinate
To retrieve the value of a cell, the cell should first be retrieved from the worksheet using the getCell()
method. A cell’s value can be read using the getValue()
method.
// Get the value fom cell A1 $cellValue = $objPHPExcel->getActiveSheet()->getCell('A1') ->getValue();
This will retrieve the raw, unformatted value contained in the cell.
If a cell contains a formula, and you need to retrieve the calculated value rather than the formula itself, then use the cell’s getCalculatedValue()
method. This is further explained in .
// Get the value fom cell A4 $cellValue = $objPHPExcel->getActiveSheet()->getCell('A4') ->getCalculatedValue();
Alternatively, if you want to see the value with any cell formatting applied (e.g. for a human-readable date or time value), then you can use the cell’s getFormattedValue()
method.
// Get the value fom cell A6 $cellValue = $objPHPExcel->getActiveSheet()->getCell('A6') ->getFormattedValue();
Setting a cell value by column and row
Setting a cell value by coordinate can be done using the worksheet’s setCellValueByColumnAndRow()
method.
// Set cell B5 with a string value $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, 5, 'PHPExcel');
Note that column references start with ‘0’ for column ‘A’, rather than from ‘1’.
Retrieving a cell value by column and row
To retrieve the value of a cell, the cell should first be retrieved from the worksheet using the getCellByColumnAndRow method. A cell’s value can be read again using the following line of code:
// Get the value fom cell B5 $cellValue = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 5) ->getValue();
If you need the calculated value of a cell, use the following code. This is further explained in .
// Get the value fom cell A4 $cellValue = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(0, 4) ->getCalculatedValue();
Retrieving a range of cell values to an array
It is also possible to retrieve a range of cell values to an array in a single call using the toArray()
, rangeToArray()
or namedRangeToArray()
methods.
$dataArray = $objPHPExcel->getActiveSheet() ->rangeToArray( 'C3:E5', // The worksheet range that we want to retrieve NULL, // Value that should be returned for empty cells TRUE, // Should formulas be calculated (the equivalent of getCalculatedValue() for each cell) TRUE, // Should values be formatted (the equivalent of getFormattedValue() for each cell) TRUE // Should the array be indexed by cell row and cell column );
These methods will all return a 2-d array of rows and columns. The toArray()
method will return the whole worksheet; rangeToArray()
will return a specified range or cells; while namedRangeToArray()
will return the cells within a defined named range
.
Looping through cells
Looping through cells using iterators
The easiest way to loop cells is by using iterators. Using iterators, one can use foreach to loop worksheets, rows within a worksheet, and cells within a row.
Below is an example where we read all the values in a worksheet and display them in a table.
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(TRUE); $objPHPExcel = $objReader->load("test.xlsx"); $objWorksheet = $objPHPExcel->getActiveSheet(); echo '<table>' . PHP_EOL; foreach ($objWorksheet->getRowIterator() as $row) { echo '<tr>' . PHP_EOL; $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(FALSE); // This loops through all cells, // even if a cell value is not set. // By default, only cells that have a value // set will be iterated. foreach ($cellIterator as $cell) { echo '<td>' . $cell->getValue() . '</td>' . PHP_EOL; } echo '</tr>' . PHP_EOL; } echo '</table>' . PHP_EOL;
Note that we have set the cell iterator’s setIterateOnlyExistingCells()
to FALSE. This makes the iterator loop all cells within the worksheet range, even if they have not been set.
The cell iterator will return a NULL as the cell value if it is not set in the worksheet.
Setting the cell iterator’s setIterateOnlyExistingCells() to FALSE will loop all cells in the worksheet that can be available at that moment. This will create new cells if required and increase memory usage! Only use it if it is intended to loop all cells that are possibly available.
Looping through cells using indexes
One can use the possibility to access cell values by column and row index like (0,1) instead of ‘A1’ for reading and writing cell values in loops.
Note: In PHPExcel column index is 0-based while row index is 1-based. That means ‘A1’ ~ (0,1)
Below is an example where we read all the values in a worksheet and display them in a table.
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(TRUE); $objPHPExcel = $objReader->load("test.xlsx"); $objWorksheet = $objPHPExcel->getActiveSheet(); // Get the highest row and column numbers referenced in the worksheet $highestRow = $objWorksheet->getHighestRow(); // e.g. 10 $highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5 echo '<table>' . "n"; for ($row = 1; $row <= $highestRow; ++$row) { echo '<tr>' . PHP_EOL; for ($col = 0; $col <= $highestColumnIndex; ++$col) { echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row) ->getValue() . '</td>' . PHP_EOL; } echo '</tr>' . PHP_EOL; } echo '</table>' . PHP_EOL;
Alternatively, you can take advantage of PHP’s «Perl-style» character incrementors to loop through the cells by coordinate:
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(TRUE); $objPHPExcel = $objReader->load("test.xlsx"); $objWorksheet = $objPHPExcel->getActiveSheet(); // Get the highest row number and column letter referenced in the worksheet $highestRow = $objWorksheet->getHighestRow(); // e.g. 10 $highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F' // Increment the highest column letter $highestColumn++; echo '<table>' . "n"; for ($row = 1; $row <= $highestRow; ++$row) { echo '<tr>' . PHP_EOL; for ($col = 'A'; $col != $highestColumn; ++$col) { echo '<td>' . $objWorksheet->getCell($col . $row) ->getValue() . '</td>' . PHP_EOL; } echo '</tr>' . PHP_EOL; } echo '</table>' . PHP_EOL;
Note that we can’t use a <= comparison here, because ‘AA’ would match as <= ‘B’, so we increment the highest column letter and then loop while $col != the incremented highest column.
Using value binders to facilitate data entry
Internally, PHPExcel uses a default PHPExcel_Cell_IValueBinder implementation (PHPExcel_Cell_DefaultValueBinder) to determine data types of entered data using a cell’s setValue()
method (the setValueExplicit()
method bypasses this check).
Optionally, the default behaviour of PHPExcel can be modified, allowing easier data entry. For example, a PHPExcel_Cell_AdvancedValueBinder class is available. It automatically converts percentages, number in scientific format, and dates entered as strings to the correct format, also setting the cell’s style information. The following example demonstrates how to set the value binder in PHPExcel:
/** PHPExcel */ require_once 'PHPExcel.php'; // Set value binder PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() ); // Create new PHPExcel object $objPHPExcel = new PHPExcel(); // ... // Add some data, resembling some different data types $objPHPExcel->getActiveSheet()->setCellValue('A4', 'Percentage value:'); // Converts the string value to 0.1 and sets percentage cell style $objPHPExcel->getActiveSheet()->setCellValue('B4', '10%'); $objPHPExcel->getActiveSheet()->setCellValue('A5', 'Date/time value:'); // Converts the string value to an Excel datestamp and sets the date format cell style $objPHPExcel->getActiveSheet()->setCellValue('B5', '21 December 1983');
Creating your own value binder is easy.
When advanced value binding is required, you can implement the PHPExcel_Cell_IValueBinder interface or extend the PHPExcel_Cell_DefaultValueBinder or PHPExcel_Cell_AdvancedValueBinder classes.