Php save to xls

Формирование Excel-документов средствами PHP

Возможность создания Excel-документов в общих чертах уже была описана на Хабре, но полной информации из этих статей мне получить не удалось. Пришлось заняться собственными изысканиями, результатами которых я хотел бы с Вами поделиться. Данная статья будет полезна и новичкам, и профессионалам, столкнувшимся с проблемой динамического формирования Excel-документов.
Это всего лишь первая часть серии статей, которыми хотелось бы поделиться с общественностью. В последующих статьях будут более подробно рассмотрены некоторые способы и нюансы выгрузки xls-файлов.

Введение

Не хочу распространяться на тему того, зачем необходима выгрузка в Excel. Мне кажется, что это вполне очевидно: в формате MS Excel достаточно удобно предоставлять пользователю загружаемые данные. Это могут быть прайс-листы, каталоги или любая подобная служебная, статистическая и иного рода информация.
Сразу хочу оговориться, что в статье рассматривается работа с документами через COM-объекты. Данный метод таботает только на Windows-платформах. Другими словами, если Вы предпочитаете *nix-хостинг, этот метод Вам не подходит.

Синтаксис

Создание COM-объекта осуществляется следующим образом:
$my_com_object = new COM($object_class);
, где
$my_com_object — новый COM-объект;
$object_class — id-класс требуемого объекта.

Читайте также:  What is java program structure

Для создания Excel-документов переменной $object_class необходимо задать значение «Excel.Application» либо «Excel.sheet».
$xls = new COM(«Excel.Application»);

После создания нового COM-объекта, можно обращаться к его свойствам и методам:
$xls = new COM(«Excel.Application»); // Создание объекта
$xls->Application->Visible = 1; // Делаем объект видимым
$xls->Workbooks->Add(); // Добавляем новую книгу (создаём документ)

$rangeValue = $xls->Range(«A1»);
$rangeValue->Value = «Декорация текста: жирный, подчеркнутый, наклонный»;
$rangeValue = $xls->Range(«A2»);
$rangeValue->Value = «Размер шрифта: 14»;
$rangeValue = $xls->Range(«A3»);
$rangeValue->Value = «Тип шрифта: Arial»;

$range=$xls->Range(«A1:J10»); // Указываем область ячеек
$range->Select(); // Выделяем эту область
$fontRange=$xls->Selection(); // Присваиваем переменной выделенную область

// Отформатируем текст в выделенной области
$fontRange->Font->Bold = true; // Жирный
$fontRange->Font->Italic = true; // Курсив
$fontRange->Font->Underline = true; // Подчеркнутый
$fontRange->Font->Name = «Arial»; // Тип шрифта
$fontRange->Font->Size = 14; // Размер шрифта
?>

Открытие, запись, закрытие документа
Общие возможности
  • создать новый документ
  • открыть ранее созданный документ
  • сохранить открытый документ
  • закрыть документ
Создание нового документа
  1. создаем «связь» между PHP и Excel (создается дескриптор, как при работе с файлами)
  2. указываем, будет ли визуально открыта программа или нет
  3. указываем программе через дескриптор, что нужно открыть новый документ
Открытие ранее созданного документа

Открытие документа можно сделать при помощи метода Open() объекта Workbooks().
В передаваемом методу Open() параметре нужно указать имя открываемого файла:
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Open(«C:\my_doc.xls»); // Открываем ранее сохраненный документ
?>
Внимание! Если указать не полный, а относительный путь, то поиск открываемого файла будет происходить не на сервере, а на компьютере пользователя. По умолчанию это папка «Мои документы».

Сохранение открытого документа

Сохранение открытого документа производится при помощи метода SaveAs() объекта Workbooks():
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range(«A1»); // Выбираем ячейку A1
$range->Value = «Проба записи»; // Вставляем значение

// Сохраняем документ
$xls->Workbooks[1]->SaveAs(«my_doc.xls»);

$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Хочу отдельно отметить, что высвобождение объектов — это очень хорошо и правильно. Да сгорят в священном очищающем пламени костров Инквизиции те, кто считает иначе.

Закрытие документа

Закрытие документа производится методом Quit().
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range(«A1»); // Выбираем ячейку A1
$range->Value = «Что-то записываем»; // Вставляем значение в ячейку

// Сохраняем документ
$xls->Workbooks[1]->SaveAs(«my_doc.xls»);

$xls->Quit(); // Закрываем приложение
$xls->Release(); // Высвобождаем объекты
$xls = Null;
$range = Null;
?>

Заключение

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

Источник

Экспорт из PHP в Excel с помощью PhpSpreadsheet

В своей профессиональной деятельности я периодически сталкиваюсь с задачами экспорта/генерации данных в формате XLS/XLSX (Excel). Библиотека PhpSpreadsheet позволяет их решить.

Данная библиотека является логичным продолжением библиотеки PHPExcel, которая уже несколько лет не поддерживается.

Скачать и установить библиотеку предлагается с помощью composer:

composer require phpoffice/phpspreadsheet

Опишу реализацию типичных задач.

Обратите внимание, что для корректной работы XMLWriter (библиотеки PHP) необходима корректная его настройка:

Типовой Hello World

getActiveSheet(); $sheet->setCellValue('A1', 'Hello World !'); $writer = new Xlsx($spreadsheet); $writer->save('hello world.xlsx');

Получение Excel документа через Ajax запрос

Php обработчик генерации XLSX документа:

header('Content-Type: application/json'); require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //some code. $writer = new Xlsx($spreadsheet); ob_start(); $writer->save('php://output'); $xlsData = ob_get_contents(); ob_end_clean(); echo json_encode('data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'.base64_encode($xlsData));
$.ajax(< type:'POST', url:". ", // path to php handler data: , // some post data dataType:'json' >).done(function(data)< var $a = $(""); $a.attr("href",data); $("body").append($a); $a.attr("download","Report.xlsx"); $a[0].click(); $a.remove(); >);

PHP обработчик формирует Excel документ и кодирует его в base64. Далее JS создает временную ссылку и в тег «href» кладёт этот закодированный контент. После инициации клика по ссылке происходит скачивание XLSX документа, а сама ссылка удаляется со страницы. Этакая мгновенная генерация Excel документа.

Установка заголовка листа

$sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Some title');

Добавление текстового контента в ячейку

Можно добавлять по координатам (отчет начинается с единицы):

$sheet = $spreadsheet->getActiveSheet(); //$columnIndex - номер колонки //$row - номер строки //$data - текстовые данные для добавления $sheet->setCellValueByColumnAndRow($columnIndex, $row, $data);

Также можно воспользоваться символьными идентификаторами:

$sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Some data');

Выравнивание

$sheet->getStyleByColumnAndRow(1,1) ->getAlignment() ->setHorizontal(PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT);

Через идентификатор ячейки:

$sheet->getStyle('B1') ->getAlignment() ->setHorizontal(PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT);

Через интервал идентификаторов ячеек:

$sheet->getStyle('B1:B5') ->getAlignment() ->setHorizontal(PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT);

Установка стиля границы (border) ячейки/ячеек

$borderStyleArray = array( 'borders' => array( 'outline' => array( 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => array('rgb' => '000000'), ), 'horizontal' => array( 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => array('rgb' => '000000'), ), 'vertical' => array( 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => array('rgb' => '000000'), ), ), ); $sheet->getStyle('F4:J4')->applyFromArray($borderStyleArray);

Объединение ячеек

Заливка ячейки/ячеек цветом

$sheet->getStyle('F4') ->getFill() ->setFillType(PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor() ->setRGB('ecf9fd');

p.s. более подробную документацию по PhpSpreadsheet можно найти в самой библиотеке, скачанной с помощью composer-а:

Источник

Export PHP data to .xls file

Export PHP data to .xls file

Data is any set of characters that is translated for some purpose, like for analysis. It can be any character or value, including text and numbers, pictures, sound, or video. If data is not put into context then it does not do anything to a human being or machine.

We generally export data from the websites to save it on the computer for offline used like to maintain list data and to analysis it. Excel is the best format to Export data in a file because reading large files is much easier in Excel for the user. Also, you can use additional functions like selecting individual cells to import the data, convert dates and time automatically, filters, sorting, reading formulas and their results etc.

Export PHP data to .xls file

In this blog we will learn how to export PHP data to .xls file step by step. With the help of simple PHP script you can export data to Excel and download it in a .xls file.

Export PHP data to .xls file

STEP 1: Create an Array to store the data

I have created an array ($customers_data) to store the customers details. You can create your own array as per your requirement:

$customers_data = array( array( 'customers_id' => '1', 'customers_firstname' => 'Chris', 'customers_lastname' => 'Cavagin', 'customers_email' => 'chriscavagin@gmail.com', 'customers_telephone' => '9911223388' ), array( 'customers_id' => '2', 'customers_firstname' => 'Richard', 'customers_lastname' => 'Simmons', 'customers_email' => 'rsimmons@media.com', 'customers_telephone' => '9911224455' ), array( 'customers_id' => '3', 'customers_firstname' => 'Steve', 'customers_lastname' => 'Beaven', 'customers_email' => 'ateavebeaven@gmail.com', 'customers_telephone' => '8855223388' ), array( 'customers_id' => '4', 'customers_firstname' => 'Howard', 'customers_lastname' => 'Rawson', 'customers_email' => 'howardraw@gmail.com', 'customers_telephone' => '9911334488' ), array( 'customers_id' => '5', 'customers_firstname' => 'Rachel', 'customers_lastname' => 'Dyson', 'customers_email' => 'racheldyson@gmail.com', 'customers_telephone' => '9912345388' ) );

STEP 2: Create a function to filter the data:

This function is used to detect double-quotes and escape any value that contains them. Without this an uneven number of quotes in a string can confuse Excel.

// Filter Customer Data function filterCustomerData(&$str) < $str = preg_replace("/\t/", "\\t", $str); $str = preg_replace("/\r?\n/", "\\n", $str); if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; >

STEP 3: Define file name and content header for download:

$file_name variable is used to hold the name of the file and also define content header for download.

// File Name & Content Header For Download $file_name = "customers_data.xls"; header("Content-Disposition: attachment; filename=\"$file_name\""); header("Content-Type: application/vnd.ms-excel");

STEP 4: Define Loop through each row in $customers_data

//To define column name in first row. $column_names = false; // run loop through each row in $customers_data foreach($customers_data as $row) < if(!$column_names) < echo implode("\t", array_keys($row)) . "\n"; $column_names = true; >// The array_walk() function runs each array element in a user-defined function. array_walk($row, 'filterCustomerData'); echo implode("\t", array_values($row)) . "\n"; > exit;

1. Define a variable $column_names which is used to print the column name in first row of excel.
2. Run a loop through each row and used array_walk() function to run each row in a user defined function.

STEP 5: Run script file in your environment:

If all goes well then the filename will be named “customers_data.xls” downloaded and saved in your computer. You can open this file in Excel which look like as following:

Run script file in your environment

Click here to download the complete code.

You can reach us at support@knowband.com for any queries. We also provide all kinds of customization needed on an online eCommerce store. You can also find the best modules of Prestashop, Opencart, Magento and Magento 2 at Knowband.

Take a look at our bestseller module Prestashop One Page supercheckout here:

Источник

Оцените статью