Как в PHPExcel динамически заполнить ячейки? — Toster.ru

Примеры по phpexcel. Создание excel-документа(.xlsx) на php

← разместить еще код

Пример создания excel-документа(.xlsx) на php с помощью класс PHPEXCEL. На странице представлен пример подключения класса и вызов методов для создания документа. Также приведены примеры следующих возможностей: — заполнение ячеек — объединение ячеек — установка ширины колонки — выравнивание контента ячейки — заливка ячеек — рамки ячеек — размер шрифта в ячейках

Расшаренный код:

//———————————-Пример————————————— date_default_timezone_set(‘Europe/London’); if (PHP_SAPI == ‘cli’) die(‘This example should only be run from a Web Browser’); require_once $_SERVER[‘DOCUMENT_ROOT’]."/phpexcel/Classes/PHPExcel.php";/* подключаем класс */ $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator("афтор") ->setLastModifiedBy("Maarten Balliauw") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); $objWorkSheet = $objPHPExcel->createSheet(0);/* номер листа */ /* …. здесь заполняем лист …. */ header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’); header(‘Content-Disposition: attachment;filename="01simple.xlsx"’); header(‘Cache-Control: max-age=0’); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’); $objWriter->save(‘php://output’); //———————————————————————— //———————————-Примеры оформления листа————————————— /* заполняем ячейки */ $objWorkSheet->setCellValue(‘A1’, ‘1 этаж’); /* объединение ячеек */ $objWorkSheet->mergeCells(‘A1:A2’); /* устанавливаем ширину колонки */ $objWorkSheet->getColumnDimension(‘A’)->setWidth(9); /* выравниваем по центру (вертильно-горизонтально) */ $objWorkSheet->getStyle(‘A2’)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER)->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); /* заливаем ячейки нужным цветом — hex (b2b2b2) */ $objWorkSheet ->getStyle(‘A1:A2’) ->getFill() ->setFillType(PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor() ->setRGB(‘hex’); /* устанавливаем бордер ячейкам */ $styleArray = array( ‘borders’ => array( ‘allborders’ => array( ‘style’ => PHPExcel_Style_Border::BORDER_THIN ) ) ); $objWorkSheet->getStyle(‘A1:A2’)->applyFromArray($styleArray); /* размер шрифта в ячейке */ $objWorkSheet->getStyle(‘A1’)->getFont()->setSize(13); /* Имя листа */ $objWorkSheet->setTitle(‘Прайс-лист ‘.$block_section);

PHPExcel и авто подбор высоты строки

При работе с библиотекой PHPExcel (для формирования эксэлевских документов «на лету») может возникнуть задача авто определения высоты строки. Другими словами, чтобы большой текст полностью помещался в ячейке с фиксированной шириной, а не урезался до одной строки или выходил за рамки.

Берём библиотеку PHPExcel версии 1.7.9 и начинаем ваять.

Пример «толстой» строки

<?php require_once ‘lib/PHPExcel/PHPExcel.php’; $objPHPExcel = new PHPExcel(); $objPHPExcel->getDefaultStyle()->getFont()->setName(«Calibri»)->setSize(11); $row = 1; // номер испытуемой строки $col = «A»; // идентификатор испытуемой колонки $width = 50; // ширина испытуемой ячейки // «толстый» текс $text = «Другими словами, чтобы большой текст полностью помещался в ячейке с фиксированной шириной, а не урезался до одной строки или выходил за рамки.»; $objPHPExcel->setActiveSheetIndex(0); $ActiveSheet = $objPHPExcel->getActiveSheet(); // задаём текст $ActiveSheet->setCellValue($col.$row, $text); // задаём ширину испытуемой ячейке $ActiveSheet->getColumnDimension($col)->setWidth($width); // отдаём файлом Excel 2007 header(«Pragma: public»); header(«Expires: 0»); header(«Cache-Control: must-revalidate, post-check=0, pre-check=0»); header(«Content-Type: application/force-download»); header(«Content-Type: application/octet-stream»); header(«Content-Type: application/download»); header(«Content-Disposition: attachment;filename=test1.xlsx»); header(«Content-Transfer-Encoding: binary «); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’); $objWriter->save(‘php://output’); ?>

В итоге получаем

А хотелось бы

Решение для одинарных ячеек.

Загоняется текст в ячейку посредством автоматического подбора высоты строки и установки автоматического разбиения по строчкам текста:

// устанавливаем авто подбор высоты $objPHPExcel->getActiveSheet()->getRowDimension($row)->setRowHeight(-1); // и авто перенос текста $objPHPExcel->getActiveSheet()->getStyle($col.$row)->getAlignment()->setWrapText(true);

, где $objPHPExcel — объект класса PHPExcel, $row — номер строки, которой необходимо задать авто подбор высоты, $col — идентификатор столбца, например, А или Z.

Получаем в итоге то, что требовалось.

Класс для работы с таблицами Excel

Всегда есть это «НО».

Что если ячейка у нас является объединением нескольких ячеек, а именно объединённых с помощью функции mergeCells()?

Получим следующее

А хотелось бы

Решение для авто подбора высоты строки для объединённых ячеек.

Для этого решения нам необходимо знать общую ширину ячейки, которая была собрана с помощью функции mergeCells. Если предыдущее решение работает только с одинарными ячейками, тогда почему бы нам не создать аналогичную, но уже одинарную ячейку в этой же строке, к примеру, в далёкой-далёкой колонке ZZ и задать ей авто перенос текста и скрыть. Тем самым мы заставим Excel установить высоту для данной строки.

$row = 1; // номер испытуемой строки $col1 = «A»; // идентификатор начальной колонки для объединения $col2 = «B»; // идентификатор конечной колонки для объединения $far_col = «ZZ»; // идентификатор «далёкой-далёкой» колонки $width = 50; // ширина испытуемой ячейки $default_width = 10; // ширина ячеек по умолчанию // «толстый» текст $text = «Другими словами, чтобы большой текст полностью помещался в ячейке с фиксированной шириной, а не урезался до одной строки или выходил за рамки.»; $ActiveSheet = $objPHPExcel->getActiveSheet(); // задаём текст для дубликата $ActiveSheet->setCellValue($far_col.$row, $text); // устанавливаем идентичную ширину дубликату и делаем невидимым $ActiveSheet->getColumnDimension($far_col)->setWidth($width + $default_width) ->setVisible(false); // задаём авто перенос дубликату $ActiveSheet->getStyle($far_col.$row)->getAlignment()->setWrapText(true);

Получаем в итоге то, что требовалось.

Осуждение статьи 🙂 б

Генерация прайс-листа в формате Excel при помощи PHP. Phpexcel

$objPHPExcel->getActiveSheet()->getStyle(‘B2’)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);

$objPHPExcel->getActiveSheet()->getStyle(‘B2’)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

$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’);

Также начиная с PHPExcel 1.7.0 метод getStyle() принимает диапазон ячеек в качестве параметра. Например, можно задать красный цвет фона для диапазона ячеек:

$objPHPExcel->getActiveSheet()->getStyle(‘B3:B7’)->getFill()

->setFillType(PHPExcel_Style_Fill::FILL_SOLID)

->getStartColor()->setARGB(‘FFFF0000’);

Когда вы впервые создаете экземпляр $objPHPExcel, он уже имеет один лист (лист 0); вы добавите новый лист (который станет листом 1), но установив активный лист на лист $i (когда $i равен 0)… поэтому вы переименовываете и заполняете исходный лист, созданный при создании экземпляра $objPHPExcel а не тот, который вы только что добавили… это ваш заголовок «0».

Вы также используете метод createSheet(), который создает новый рабочий лист и добавляет его в рабочую книгу… но вы также добавляете его снова, что эффективно добавляет лист в две позиции.

Итак, первая итерация, у вас уже есть sheet0, добавьте новый лист в оба индекса 1 и 2 и отредактируйте/запишите лист 0.

Чтение excel на PHP — основные методы класса PHPExcel

Вторая итерация, вы добавляете новый лист в оба индекса 3 и 4, а также редактируете/заголовок листа 1, но из-за того, что у вас один и тот же лист в индексах 1 и 2, это эффективно записывает на лист по индексу 2. Третья итерация, вы добавляете новый лист в индексы 5 и 6 и редактируете/заголовок 2, перезаписываете свое раннее редактирование/заголовок листа 1, который действовал против листа 2 вместо… и т.д.

ответ дан Mark Baker 24 марта '12 в 12:56

источникподелиться

Создание товарной накладной в Excel на PHPExcel

Генерация XLS на PHP

Очень часто необходимо делать экспорт каких-то данных, например, из базы данных в Excel-файл. Например, какой-нибудь прайс-лист преобразовать в удобный формат из базы данных и сгенерировать XLS-файл, который смогут без проблем скачать посетители. И вот как генерировать XLS на PHP, я расскажу в этой статье.

Нам потребуется с Вами отдельная библиотека, которая позволяет работать с Excel-файлами. Называется она PHPExcel, и скачать её можно здесь: http://phpexcel.codeplex.com.

Давайте её применим для генерация Excel-файла через PHP-скрипт:

После выполнения скрипта у Вас рядом с PHP-файлом появится XLSX-файл, который Вы легко сможете открыть в Excel 2007 или более поздней версии.

Вообще, библиотека достаточно большая и там есть очень много возможностей. Но представленных в данной статье уже более, чем достаточно для большинства случаев.

  • Создано 02.03.2012 16:44:32

  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так:

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *