一、安装PHPExcel
1、TP5版本直接可以使用composer安装(composer这一块不会的自己去找教程):
composer require phpoffice/phpexcel
非常方便。
2、从官网下载PHPExcel,然后放到vendor目录或者放到extend目录下面(下面介绍的是放到extend目录下)
二、在控制起页面中引入PHPExcel类
EXTEND_PATH.你的PHPExcel中PHPExcel.php路径
1,生成一个excel 实例
2、输出一个excel表格保存到本地
三、从数据库下载数据生成excel
1、封装数据库数据
2、封装excel下载函数
3.测试
浏览器中输入你的测试地址会弹出
下载成功
四、整体代码
<?php namespace app\home\controller; require_once EXTEND_PATH.'PHPExcel/Classes/PHPExcel.php'; class Index { /** * 生成一个excel 文件 */ public function index(){ $path=dirname(__FILE__); //当前脚本所在的目录 $PHPExcel=new \PHPExcel(); //实例化PHPExcel类,类似于在桌面上新建一个Excel表格 $PHPSheet= $PHPExcel->getActiveSheet(); //获取当前活动sheet的操作对象 $PHPSheet->setTitle('demo'); //给当前活动sheet设置名称 $PHPSheet->setCellValue('A1','姓名')->setCellValue('B1','分数'); //给当前活动sheet填充数据,数据填充是按顺序一行一行填充的,假如想给A1留空,可以直接setCellValue(‘A1’,’’); $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,'Excel5'); //按照指定格式生成Excel文件,‘Excel2005’表示生成2005版本的xlsx, $PHPWriter->save($path.'/demo1.xlsx'); //表示在$path路径下面生成demo1.xlsx文件 } /** * 导出一个excel保存在本地文件目录 */ public function excelDownload(){ $path=dirname(__FILE__); //当前脚本所在的目录 $PHPExcel=new \PHPExcel(); //实例化PHPExcel类,类似于在桌面上新建一个Excel表格 $PHPSheet= $PHPExcel->getActiveSheet(); //获取当前活动sheet的操作对象 $PHPSheet->setTitle('demo'); //给当前活动sheet设置名称 $PHPSheet->setCellValue('A1','姓名')->setCellValue('B1','分数'); //给当前活动sheet填充数据,数据填充是按顺序一行一行填充的,假如想给A1留空,可以直接setCellValue(‘A1’,’’); $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,'Excel5'); //按照指定格式生成Excel文件, // Redirect output to a client’s web browser (Excel5) header('Content-Type: application/vnd.ms-excel'); // 告诉浏览器生成一个excel05版的表格 header('Content-Disposition: attachment;filename="01simple.xls"'); //告诉浏览器输出文件的名称 header('Cache-Control: max-age=0'); //禁止缓存 $PHPWriter->save("php://output"); //输出到浏览器 } /** * 测试从数据库中下载数据 */ public function test(){ dump($this->outExceDatas()); }
/** * 封装excel下载 * @param array $field * @param array $list * @param string $title * @return [type] */ public function phpExcelList($field=[],$list=[],$title='文件'){ $PHPExcel=new \PHPExcel(); $PHPSheet=$PHPExcel->getActiveSheet(); $PHPSheet->setTitle('demo'); //给当前活动sheet设置名称 foreach($list as $key=>$value) { foreach($field as $k=>$v){ if($key == 0){ $PHPSheet= $PHPExcel->getActiveSheet()->setCellValue($k.'1',$v[1]); } $i=$key+2; $PHPExcel->getActiveSheet()->setCellValue($k . $i, $value[$v[0]]); } } $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,'Excel5'); //按照指定格式生成Excel文件, // Redirect output to a client’s web browser (Excel5) header('Content-Type: application/vnd.ms-excel'); // 告诉浏览器生成一个excel05版的表格 header("Content-Disposition: attachment;filename={$title}.xls"); //告诉浏览器输出文件的名称 header('Cache-Control: max-age=0'); //禁止缓存 $PHPWriter->save("php://output"); //输出到浏览器 } /** * 封装数据库数据 */ public function outExceDatas(){ //用数组代替数据库中的数据 $arr=[ 0=>[ 'price'=>200, 'uname'=>'user1', ], 1=>[ 'price'=>300, 'uname'=>'user2', ], 2=>[ 'price'=>400, 'uname'=>'user3', ], 3=>[ 'price'=>500, 'uname'=>'user4', ], ]; foreach($arr as $key => $value){ $arr[$key]['price']=number_format($value['price'],2); } $field=array( 'A' => array('uname', '用户名称'), 'B' => array('price', '金额(元)'), ); $until=$this->phpExcelList($field,$arr,'充值列表'); } }