您的位置:首页 > 编程语言 > PHP开发

ThinkPHP3.2利用PHPExcel导出Excel

2017-01-12 11:06 543 查看
最近做了一个关于微信投票的PHP项目,里面有个功能要求能导出选手信息生成Excel表格。于是,我采用PHPExcel类库集成到thinkphp3.2框架来实现这个功能。

第一步,先到PHPExcel官网下载PHPExcel的类库文件。各位可以点击这里到PHPExcel官网

解压目录如下图:



打开Classes文件夹,复制PHPExcel文件夹和PHPExcel.php到项目所在的ThinkPHP的Library/Org/Util/目录下。





第二步,根据PHPExcel的API文档和需求,写导出Excel的后台代码。

/*
* 导出成Excel表格
*/
public function exportExcel(){
//根据投票ID获取选手资料
$vote_id = $_GET['vote_id'];
$select['id'] = $_GET['vote_id'];
$vote = D('vote');
$result = $vote->where($select)->find();
$filename =$result['theme'].date('Ymd',time()).'.xlsx';
$sheetname = $result['theme'];
//查询选手数据,根据排名先后排序
$sql = 'SELECT NAME,info,vote_count,rank,img FROM
(SELECT A.*, @rownum:=@rownum+1 AS rownum,
IF(@vote_count=vote_count,@rank,@rank:=@rownum)
AS rank,@vote_count:=vote_count FROM
='.$vote_id .' GROUP BY id ORDER BY
vote_count DESC) A,
)B) AS result ';
$model = new \Think\Model();
$data = $model->query($sql);
//引入phpEscel类,因为phpExcel没有命名空间,因此要使用import这样的方法
import('Org.Util.PHPExcel');
//实例化phpExcel类
$objPHPExcel = new \PHPExcel();
//设置文本对齐方式
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objActSheet=$objPHPExcel->getActiveSheet();
//设置当前sheet的值
$objPHPExcel->getActiveSheet()->setTitle("$sheetname");
$letter = array('A','B','C','D','E');
//设置表头数据
$tableheader = array('姓名','信息','总票数','排名','图片');
//填充表格表头
for($i = 0; $i < count($tableheader); $i++){
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]");
}
//填充数据
$j = 1;
for($i = 0;$i < count($data); $i++){
$j = $j +1;
for($row = 0; $row < count($data[$i]);$row++){
/*设置表格宽度*/
$objActSheet->getColumnDimension("$letter[$row]$j")->setWidth(50);
/*设置表格高度*/
$objPHPExcel->getActiveSheet()->getRowDimension($j)->setRowHeight(50);
switch($row){
case 0: $value = $data[$i]['name'];
//设置表格的值
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
break;
case 1: $value = $data[$i]['info'];
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
break;
case 2: $value = $data[$i]['vote_count'];
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
break;
case 3: $value = $data[$i]['rank'];
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
break;
case 4:  //实例化excel图片处理类
$objDrawing = new \PHPExcel_Worksheet_Drawing();
$imgURL = $data[$i]['img'];
$str =  str_replace('Vote/index.php',"$imgURL",$_SERVER['SCRIPT_FILENAME']);
$objDrawing ->setPath($str);
$objDrawing->setHeight(50);
$objDrawing->setCoordinates("$letter[$row]$j");  //插入图片
$objDrawing->getShadow()->setVisible(true);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
default;
}
}
}
//保存
import('Org.Util.PHPExcel.IOFactory');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
//设置下载类型
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('ContentDisposition:attachment;filename="'.$filename.'"');  //设置下载文件名
header("Content-Transfer-Encoding:binary");
$objWriter ->save('php://output'); //导出文件
}


效果如下:





更多的关于PHPExcel的用法在PHPExcelAPI文档查看,当然这是官网的英文版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp php excel