首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可。
(一)导入Excel
第一,在前台html页面进行上传文件:如:
<form method="post" action="php文件" enctype="multipart/form-data">
<h3>导入Excel表:</h3><input type="file" name="file_stu" />
<input type="submit" value="导入" />
</form>
第二,在对应的php文件进行文件的处理
/** * excel数据导出 */ public function excel() { //判断是否是post提交方式 if(request()->isPost()) { if (! empty ( $_FILES ['file_stu'] ['name'] )) { $tmp_file = $_FILES ['file_stu'] ['tmp_name']; $file_types = explode ( ".", $_FILES ['file_stu'] ['name'] ); $file_type = $file_types [count ( $file_types ) - 1]; /*判别是不是.xls文件,判别是不是excel文件*/ if (strtolower ( $file_type ) != 'xls' && strtolower ( $file_type ) != 'xlsx'){ $this->error('不是Excel文件,请重新上传'); } /*设置上传路径*/ $savePath = ROOT_PATH . 'public' . DS . 'uploads/attachment/'; /*以时间来命名上传的文件*/ $str = date ( 'Ymdhis' ); $file_name = $str . "." . $file_type; /*是否上传成功*/ if (! copy ( $tmp_file, $savePath . $file_name )) { $this->error ( '上传失败' ); } // 调用excel数据导入函数 $data = import_excel($savePath . $file_name,0); echo "<pre>"; var_dump($data);exit; } else { $this->error('没有导入excel文件!'); } } //模板渲染 return $this->fetch(); }
/** * 数据导入 * @param string $file excel文件,详细地址 * @param string $sheet * @return string 返回解析数据 * @throws PHPExcel_Exception * @throws PHPExcel_Reader_Exception */ function import_excel($file='', $sheet=0){ $file = iconv("utf-8", "gb2312", $file); //转码 if(empty($file) OR !file_exists($file)) { die('file not exists!'); } // 1.引入excel外部插件 require_once('../vendor/phpexcel/phpexcel.php'); //include('PHPExcel.php'); //引入PHP EXCEL类 $objRead = new PHPExcel_Reader_Excel2007(); //建立reader对象 if(!$objRead->canRead($file)){ $objRead = new PHPExcel_Reader_Excel5(); if(!$objRead->canRead($file)){ die('No Excel!'); } } $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'); $obj = $objRead->load($file); //建立excel对象 $currSheet = $obj->getSheet($sheet); //获取指定的sheet表 $columnH = $currSheet->getHighestColumn(); //取得最大的列号 $columnCnt = array_search($columnH, $cellName); $rowCnt = $currSheet->getHighestRow(); //获取总行数 $data = array(); for($_row=1; $_row<=$rowCnt; $_row++){ //读取内容 for($_column=0; $_column<=$columnCnt; $_column++){ $cellId = $cellName[$_column].$_row; $cellValue = $currSheet->getCell($cellId)->getValue(); //$cellValue = $currSheet->getCell($cellId)->getCalculatedValue(); #获取公式计算的值 if($cellValue instanceof PHPExcel_RichText){ //富文本转换字符串 $cellValue = $cellValue->__toString(); } $data[$_row][$cellName[$_column]] = $cellValue; } } //返回excel数据 return $data; }
(二)导出Excel
/** * 数据 Excel导出 */ public function excel() { //封装自己需要的数组 $info[0]['order_number'] = 123456; // 1.引入excel外部插件 require_once('../vendor/phpexcel/phpexcel.php'); // 2.创建一个excel对象 $objPHPExcel = new \PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); //切换到新创建的工作表 // 获取单元格对象 $activeSheet = $objPHPExcel->getActiveSheet()->setTitle('订单数据'); // 3.输出第一列数据 $first_data = array('A'=>'订单号'); foreach ($first_data as $first_key => $first_value) { // 设置 A1,B1,C1等单元格的内容 $activeSheet->setCellValue("{$first_key}1", $first_value); // 设置单元格的样式为居中 $activeSheet->getStyle("{$first_key}1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // 设置单元格的宽度为15 switch ($first_key) { case 'A': $activeSheet->getColumnDimension("{$first_key}")->setWidth(20); break; } } // 4.从第2行开始插入数据 $lie_name = array('0'=>'A'); //excel第一列名称 $lie_num = 0; //excel列数,从零开始 $second = 2; //excel第二行 foreach ($info as $k => $v) { foreach ($v as $e => $f) { $activeSheet->setCellValue("{$lie_name[$lie_num]}{$second}", $f); // 自动居中 $activeSheet->getStyle("{$lie_name[$lie_num]}{$second}")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $lie_num++; } $activeSheet->getRowDimension("{$second}")->setRowHeight(80); $second++; $lie_num = 0; } $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); // 直接输出到浏览器 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/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header("Content-Disposition:attachment;filename=订单数据.xls"); header("Content-Transfer-Encoding:binary"); $objWriter->save("php://output"); }