コード例 #1
0
ファイル: PSU.php プロジェクト: AholibamaSI/plymouth-webapp
 /**
  * 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']);
 }