Генерирование XLSX на PHP

07.07.2018  09:58

Конечная задача: сделать валидный XLSX средствами PHP.

Перебрав кучу классов по поводу выгрузки в Эксель я остановился на классе Lightwight XLSX Excel Spreadsheet Writer in PHP с достаточно богатым функционалом. Но там есть косяк, что параметры тегов иногда создаются пустые, а Excel это не любит и ругается. Костылим этот класс:

// строка 260, строки ниже заменяем. Было:
$customHt = isset($row_options['height']) ? true : false;
$hidden = isset($row_options['hidden']) ? (bool)($row_options['hidden']) : false;
$collapsed = isset($row_options['collapsed']) ? (bool)($row_options['collapsed']) : false;
//такие:
$customHt = isset($row_options['height']) ? 'true' : 'false';
$hidden = isset($row_options['hidden']) ? (bool)($row_options['hidden']) : 'false';
$collapsed = isset($row_options['collapsed']) ? (bool)($row_options['collapsed']) : 'false';		


Пример скрипта, генерирующего .xlsx:

include_once($_SERVER["DOCUMENT_ROOT"]."/scripts/classes/xlsxwriter.class.php");
$file = $_SERVER["DOCUMENT_ROOT"]."/upload/prices_full.xlsx";
$styles1 = array( 'font'=>'Arial','font-size'=>12,'font-style'=>'bold', 'fill'=>'#eee', 'border'=>'left,right,top,bottom');
$styles2 = array( 'font'=>'Arial','font-size'=>12,'font-style'=>'bold', 'border'=>'left,right,top,bottom','wrap_text'=>false);
$styles3 = array('font'=>'Arial','font-size'=>11,'border'=>'left,right,top,bottom');
$styles4 = array( 'font'=>'Arial','font-size'=>11, 'fill'=>'#eee', 'border'=>'left,right,top,bottom');
$writer = new XLSXWriter();
//$writer->writeSheetHeader('Sheet1', array('col-string'=>'string','col-numbers'=>'integer','col-timestamps'=>'datetime'), ['auto_filter'=>true, 'widths'=>[300,15,30]] ); 
// $writer->writeSheetRow('Sheet1', $rowdata = array(' ',' ',' '),array('widths'=>[100,15,30])); 
$writer->writeSheetRow('Sheet1', $rowdata = array('Название компании','',''), $styles2 );
$writer->writeSheetRow('Sheet1', $rowdata = array('7 (000) 000-00-00','',''), $styles2 );
$writer->writeSheetRow('Sheet1', $rowdata = array('Цены указаны на '.$date,'',''), $styles2 );
$writer->writeSheetRow('Sheet1', $rowdata = array('Цены могут меняться в связи с колебаниями курса валют.  Рекомендуем уточнять актуальность цен у менеджеров.','',''), $styles2 );
$writer->writeSheetRow('Sheet1', $rowdata = array('Ценовая группа/ Номенклатура','Цена','Артикул'), $styles1 );
//дальше по коду у меня ваяется табличка с товарами и ценами


перейти в Блог

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): PHP 55  web-программирование 79  XML 2  молодым домохозяйкам 44  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)