/** * renders an xlsx version of the report */ public function xlsx($data, $meta = array()) { require_once 'phpexcel/PHPExcel.php'; $objPHPExcel = new PHPExcel(); // Set properties $default_meta = array('creator' => 'PSU Tools', 'last_modified_by' => 'PSU Tools', 'title' => 'XLSX Export', 'subject' => 'Plymouth State University', 'description' => 'Generated using PSU Tools', 'keywords' => 'office 2007 openxml php', 'company' => 'Plymouth State University', 'category' => 'Plymouth State University', 'file_name' => 'export', 'output' => 'php://output'); $meta = array_merge($default_meta, $meta); $objPHPExcel->setActiveSheetIndex(0); // generate headings $i = 1; if (count($meta['headings']) > 0) { $col = 0; $letter = 'A'; foreach ($meta['headings'] as $v) { $letter = PSU::indexToExcelAlpha($col); $objPHPExcel->getActiveSheet()->setCellValue($letter . $i, $v); $objPHPExcel->getActiveSheet()->getStyle($letter . $i)->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getColumnDimension($letter)->setAutoSize(true); $col++; } // end foreach $objPHPExcel->getActiveSheet()->getStyle('A1:' . $letter . '1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle('A1:' . $letter . '1')->getFill()->getStartColor()->setARGB('FFdddddd'); $i++; } // now for the actual data foreach ($data as $row) { $col = 0; foreach ($row as $key => $value) { $letter = PSU::indexToExcelAlpha($col); if (is_array($meta['types'])) { switch ($meta['types'][$key]) { case 'boolean': $type = PHPExcel_Cell_DataType::TYPE_BOOL; break; case 'formula': $type = PHPExcel_Cell_DataType::TYPE_FORMULA; break; case 'inline': $type = PHPExcel_Cell_DataType::TYPE_INLINE; break; case 'null': $type = PHPExcel_Cell_DataType::TYPE_NULL; break; case 'number': $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; break; case 'string': $type = PHPExcel_Cell_DataType::TYPE_STRING; break; default: $type = 'AUTOMATIC'; } if ($type == 'AUTOMATIC') { $objPHPExcel->getActiveSheet()->setCellValue($letter . $i, $value); } else { $objPHPExcel->getActiveSheet()->getCell($letter . $i)->setValueExplicit($value, $type); } } $col++; } //end foreach $i++; } // end foreach $objPHPExcel->getProperties()->setCreator($meta['creator'])->setLastModifiedBy($meta['last_modified_by'])->setTitle($meta['title'])->setSubject($meta['subject'])->setDescription($meta['description'])->setKeywords($meta['keywords'])->setCompany($meta['company'])->setCategory($meta['category']); if (class_exists('ZipArchive')) { $file_extension = 'xlsx'; $file_type = 'Excel2007'; } else { $file_extension = 'xls'; $file_type = 'Excel5'; } if ($meta['output'] == 'php://output') { // Redirect output to a client header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $meta['file_name'] . '.' . $file_extension . '"'); self::downloadfix(); } $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $file_type); $objWriter->save($meta['output']); }