filename = isset($param['filename']) ? $param['filename'].'-'.$date : $date; // 文件类型, 默认excel $type_all = array('excel' => 'vnd.ms-excel', 'pdf' => 'pdf'); $this->file_type = (isset($param['file_type']) && isset($type_all[$param['file_type']])) ? $type_all[$param['file_type']] : $type_all['excel']; // 文件后缀名称 $this->suffix = empty($param['suffix']) ? 'xls' : $param['suffix']; // 标题 $this->title = isset($param['title']) ? $param['title'] : array(); // 数据 $this->data = isset($param['data']) ? $param['data'] : array(); // 出错跳转地址 $this->jump_url = empty($param['jump_url']) ? $_SERVER['HTTP_REFERER'] : $param['jump_url']; // 错误提示信息 $this->msg = empty($param['msg']) ? 'title or data cannot be empty!' : $param['msg']; // 引入PHPExcel类库 vendor("PHPExcel.PHPExcel"); } /** * [Export excel文件导出] * @author Devil * @blog http://gong.gg/ * @version 0.0.1 * @datetime 2017-01-10T15:12:01+0800 */ public function Export() { // 是否有数据 if(empty($this->title) && empty($this->data)) { echo ''; echo ''; die; } // excel对象 $excel = new \PHPExcel(); // 操作第一个工作表 $excel->setActiveSheetIndex(0); // 文件输出类型 switch($this->file_type) { // PDF case 'pdf': $writer = PHPExcel_IOFactory::createWriter($excel, 'PDF'); $writer->setSheetIndex(0); break; // 默认EXCEL default: $writer = \PHPExcel_IOFactory::createWriter($excel, 'Excel5'); } // 获取配置编码类型 $excel_charset = MyC('admin_excel_charset', 0); $charset = L('common_excel_charset_list')[$excel_charset]['value']; // 标题 foreach($this->title as $v) { $excel->getActiveSheet()->setCellValue($v['col'].'1', ($excel_charset == 0) ? $v['name'] : iconv('utf-8', $charset, $v['name'])); } // 内容 foreach($this->data as $k=>$v) { $i = $k+2; if(is_array($v) && !empty($v)) { foreach($this->title as $tk=>$tv) { $excel->getActiveSheet()->setCellValueExplicit($tv['col'].$i, ($excel_charset == 0) ? $v[$tk] : iconv('utf-8', $charset, $v[$tk]), \PHPExcel_Cell_DataType::TYPE_STRING); } } } // 头部 header('Pragma: public'); header('Expires: 0'); header('Cache-Control:must-revalidate, post-check=0, pre-check=0'); header('Content-Type:application/force-download'); header('Content-Type: application/'.$this->file_type.';;charset='.$charset); header('Content-Type:application/octet-stream'); header('Content-Type:application/download'); header('Content-Disposition:attachment;filename='.$this->filename.'.'.$this->suffix); header('Content-Transfer-Encoding:binary'); $writer->save('php://output'); } /** * [Import excel文件导入] * @author Devil * @blog http://gong.gg/ * @version 0.0.1 * @datetime 2017-04-06T18:18:55+0800 * @param [string] $file [文件位置,空则读取全局excel的临时文件] * @return [array] [数据列表] */ public function Import($file = '') { // 文件为空则取全局文变量excel的临时文件 if(empty($file) && !empty($_FILES['excel']['tmp_name'])) { $file = $_FILES['excel']['tmp_name']; } // 文件地址是否有误,title数据是否有数据 if(empty($file) || empty($this->title)) { echo ''; echo ''; die; } // 取得文件基础数据 $reader = \PHPExcel_IOFactory::createReader('Excel5'); $excel = $reader->load($file); // 取得总行数 $worksheet = $excel->getActiveSheet(); // 取得总列数 $highest_row = $worksheet->getHighestRow(); // 取得最高的列 $highest_column = $worksheet->getHighestColumn(); // 总列数 $highest_column_index = \PHPExcel_Cell::columnIndexFromString($highest_column); // 定义变量 $result = array(); $field = array(); // 读取数据 for($row=1; $row<=$highest_row; $row++) { // 临时数据 $info = array(); // 注意 highest_column_index 的列数索引从0开始 for($col = 0; $col < $highest_column_index; $col++) { $value = $worksheet->getCellByColumnAndRow($col, $row)->getFormattedValue(); if($row == 1) { foreach($this->title as $tk=>$tv) { if($value == $tv['name']) { $tv['field'] = $tk; $field[$col] = $tv; } } } else { if(!empty($field)) { $info[$field[$col]['field']] = ($field[$col]['type'] == 'int') ? trim(ScienceNumToString($value)) : trim($value); } } } if($row > 1) { $result[] = $info; } } return $result; } } ?>