一、安装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,'充值列表');
}
}