コード例 #1
0
ファイル: Excel.php プロジェクト: jasonzhangxian/uums
 /**
  * excel导出方法
  * @param array $content 导出内容
  */
 public function extraExcel($content)
 {
     if (!$this->_excelId && in_array($this->_excelRecordSaveType, array('database', 'file'))) {
         $this->_halt('You must create a record with getOneRecord() first!');
     }
     //参数是否存在
     if (empty($this->_excelTitle) || empty($this->_excelFields) || empty($content)) {
         $this->_halt('excelTitle,excelFields,content can not be empty!');
     }
     // 创建PHPExcel对象
     $objPHPExcel = new PHPExcel();
     // 设置excel文件名称
     $objPHPExcel->getProperties()->setTitle($this->_excelTitle);
     // 设置当前工作表
     $objPHPExcel->setActiveSheetIndex(0);
     //设置宽width
     //$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
     //$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
     // 列编号从0开始,行编号从1开始
     $col = 0;
     $row = 1;
     $objActSheet = $objPHPExcel->getActiveSheet();
     foreach ($this->_excelFields as $field) {
         $objActSheet->getColumnDimensionByColumn($col)->setAutoSize(true);
         $objActSheet->setCellValueByColumnAndRow($col, $row, $field);
         $objActSheet->getStyleByColumnAndRow($col, $row)->getFont()->setBold(true);
         $objActSheet->getStyleByColumnAndRow($col, $row)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
         $objActSheet->getStyleByColumnAndRow($col, $row)->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
         $objActSheet->getStyleByColumnAndRow($col, $row)->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
         $objActSheet->getStyleByColumnAndRow($col, $row)->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
         $col++;
     }
     //数组转为对象,自动匹配传递参数fields表头字段和内容
     $result = new StdClass();
     foreach ($content as $key => $value) {
         $result->{$key} = new StdClass();
         foreach ($this->_excelFields as $k => $v) {
             $result->{$key}->{$k} = isset($value[$k]) ? $value[$k] : '';
         }
     }
     // 从第二行开始输出数据内容
     $row = 2;
     foreach ($result as $data) {
         $col = 0;
         foreach ($this->_excelFields as $field => $name) {
             if (is_numeric($data->{$field}) && strlen($data->{$field}) < 12 && (substr($data->{$field}, 0, 1) != 0 || $data->{$field} <= 0)) {
                 $objActSheet->setCellValueExplicitByColumnAndRow($col, $row, $data->{$field}, PHPExcel_Cell_DataType::TYPE_NUMERIC);
             } else {
                 $objActSheet->setCellValueExplicitByColumnAndRow($col, $row, $data->{$field}, PHPExcel_Cell_DataType::TYPE_STRING);
             }
             $col++;
         }
         $row++;
     }
     //输出excel文件
     //实例化excel写方法,并调用函数
     $PHPExcel2007 = new PHPExcel_Writer_Excel2007();
     $PHPWriter = $PHPExcel2007->setPHPExcel($objPHPExcel);
     //判断文件夹是否存在,如果不存在就创建新的文件夹
     $savePath = self::EXCELFILE_PATH . date('Ymd') . '/';
     $this->checkFloderExists($savePath);
     //设置文件名
     list($usec, $sec) = explode(' ', microtime());
     $tail = date('YmdHis') . str_replace('0.', '', $usec);
     $fileName = $savePath . mb_convert_encoding($this->_excelTitle, 'GB2312', 'UTF-8') . '_' . $tail . '.xlsx';
     $downUrl = $savePath . $this->_excelTitle . '_' . $tail . '.xlsx';
     //导出的文件
     $PHPWriter->save($fileName);
     $this->setFinished($downUrl);
     return $downUrl;
 }