在thinkphp5.0+中使用PHPExcel

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

猜你喜欢

转载自blog.csdn.net/hailanzi/article/details/80038002