В этом примере я не только хочу показать, как создать эксель файл (xlsx), но и как добавить в него картинку.
Данные будем помещать в уже готовый файл (в файле первая строка это фиксированные заголовки столбцов).
Запись в XLSX файл на PHP, используя PHPExcel.
27.01.2015
Все оформлено в виде класса:
Еще важный момент, если нужно установить тип данных, то стоит использовать функцию setCellValueExplicit вместо setCellValue:
1 |
$objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit('A'.$iRaw, $oRow->sku, 's'); |
1 |
class soXlExport { function __construct() { date_default_timezone_set('Europe/Moscow'); require_once _soWorkPath.'/xls/PHPExcel.php'; } public function make($aRows) { date_default_timezone_set('Europe/Moscow'); // Загружаем пустой файл шаблон $objPHPExcel = PHPExcel_IOFactory::load(_soWorkPath.'/blank.xlsx'); $i=0; foreach($aRows as $oRow) { $iRaw = $i+2; $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$iRaw, $oRow->id); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$iRaw, $oRow->title); // Добавляем картинку $sPicPath = _soWorkPath.'/images/product/'.$oRow->pic; list($width1, $height1, $type1, $attr1) = GetImageSize($sPicPath); switch($this->_getTypeByNum($type1)) { case 'JPG': $gdImage = ImageCreateFromJpeg($sPicPath); break; case 'GIF': $gdImage = ImageCreateFromGif($sPicPath); break; case 'PNG': $gdImage = ImageCreateFromPng($sPicPath); break; default: c_error::Fatal('Wrong '.$this->_type.' in (should be JPEG, PNG or GIF). File: "'.$sPicPath.'"'); break; } $objDrawing = new PHPExcel_Worksheet_MemoryDrawing(); $objDrawing->setName('image'); $objDrawing->setDescription('image'); $objDrawing->setImageResource($gdImage); $objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG); $objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT); $objDrawing->setHeight(70); $objDrawing->setCoordinates('C'.$iRaw); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); } $i++; } $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save($sFullName); } // определяем тип картинки (для удобства) protected function _getTypeByNum($Num) { $sRet = 'undefined'; switch ($Num) { case 1: $sRet = 'GIF'; break; case 2: $sRet = 'JPG'; break; case 3: $sRet = 'PNG'; break; case 4: $sRet = 'SWF'; break; case 5: $sRet = 'PSD'; break; case 6: $sRet = 'BMP'; break; case 7: $sRet = 'TIFF(intel byte order)'; break; case 8: $sRet = 'TIFF(motorola byte order)'; break; case 9: $sRet = 'JPC'; break; case 10: $sRet = 'JP2'; break; case 11: $sRet = 'JPX'; break; case 12: $sRet = 'JB2'; break; case 13: $sRet = 'SWC'; break; case 14: $sRet = 'IFF'; break; case 15: $sRet = 'WBMP'; break; case 16: $sRet = 'XBM'; break; } return $sRet; } } |
Использование:
1 |
$oXlExport = new soXlExport(); // Получаем данные из какого-либо источника. $aRows = getDemoData(); $oXlExport->make($aRows); |