บางครั้งการ export ข้อมูลออกไปเป็นไฟล์ excel ก็ต้องการใส่ภาพลงไปด้วย อาจจะเป็นโลโก้บริษัท หรือว่าเป็นภาพตัวอย่างสินค้า PHPExcel สามารถแทรกภาพได้ทั้งจาก file หรือ url ของภาพที่ออนไลน์อยู่
<?php include 'vendor/phpoffice/phpexcel/Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); /* Set default style */ $defaultStyle = $objPHPExcel->getDefaultStyle(); $defaultStyle->getFont() ->setName('Arial') ->setSize(11); /* Set document properties */ $title = 'Exports_Datas_' . date('Y-m-d_H:i'); $objPHPExcel->getProperties()->setCreator('Pitt Phunsanit') ->setCategory('Exports Datas') ->setDescription($title) ->setKeywords('Exports Datas ' . date('Y-m-d')) ->setSubject($title) ->setTitle($title); /* rename sheet */ $objWorkSheet = $objPHPExcel->getActiveSheet(); $objWorkSheet->setTitle('Exports Datas'); /* image path */ $images = [ 'https://raw.githubusercontent.com/PHPOffice/PHPExcel/1.8/Examples/images/officelogo.jpg', 'https://raw.githubusercontent.com/PHPOffice/PHPExcel/1.8/Examples/images/paid.png', 'https://raw.githubusercontent.com/PHPOffice/PHPExcel/1.8/Examples/images/phpexcel_logo.gif', 'https://raw.githubusercontent.com/PHPOffice/PHPExcel/1.8/Examples/images/termsconditions.jpg', 'vendor/phpoffice/phpexcel/Examples/images/officelogo.jpg', 'vendor/phpoffice/phpexcel/Examples/images/paid.png', 'vendor/phpoffice/phpexcel/Examples/images/phpexcel_logo.gif', 'vendor/phpoffice/phpexcel/Examples/images/termsconditions.jpg', ]; $rowNo = 0; foreach ($images as $image) { $rowNo++; $coordinate = 'A' . $rowNo; $objWorkSheet->getRowDimension($rowNo)->setRowHeight(90); $objWorkSheet->setCellValue($coordinate, $image); switch (strtolower(pathinfo($image, PATHINFO_EXTENSION))) { case 'gif': $gdImage = imagecreatefromgif($image); $mimetype = PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_GIF; $render = PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF; break; case 'jpeg': case 'jpg': $gdImage = imagecreatefromjpeg($image); $mimetype = PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_JPEG; $render = PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG; break; case 'png': $gdImage = imagecreatefrompng($image); $mimetype = PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG; $render = PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG; break; } $objDrawing = new PHPExcel_Worksheet_MemoryDrawing(); $objDrawing->setCoordinates($coordinate); $objDrawing->setImageResource($gdImage); $objDrawing->setWorksheet($objWorkSheet); /* optional */ $objDrawing->setDescription($image); $objDrawing->setMimeType($mimetype); $objDrawing->setName(pathinfo($image, PATHINFO_FILENAME)); $objDrawing->setRenderingFunction($render); $objDrawing->setResizeProportional(true); $objDrawing->setWidth(100); } $objWorkSheet->getColumnDimension('A')->setAutoSize(true); /* write */ $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $title . '.xlsx"'); header('Cache-Control: max-age=0'); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); $objWriter->save('php://output');
อธิบาย
- setCoordinates
- ตำแหน่งที่ให้ภาพไปลอยอยู่
- setDescription
- รายละเอียด (optional)
- setName
- ชื่อภาพ (optional)
- setResizeProportional
- รักษาสัดส่วนของภาพเอาไว้
- setWorksheet
- อ้างถึง Active Sheet หรือ sheet ที่ใส่ข้อมูล
ถ้าเลือกใช้ PHPExcel_IOFactory::createWriter ผิด version เช่น ‘Excel5’ อาจจะทำให้ภาพมีสัดส่วนเพี้ยนได้