您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
thinkphp3.1.3整合excel导出功能(支持图片导出)
发布时间:2017-09-19 16:52:06编辑:雪饮阅读()
阅读本文前请先了解 php导出数据为excel
控制器中要引入phpexcel类如:
include $_SERVER["DOCUMENT_ROOT"]."/PHPExcel/Classes/PHPExcel.php";
实现方法:
//入口方法
public function export(){
$m=M("wash_type");
$bm="id,name,price,srcimg as img";
$list=$m->field($bm)->select();
//过滤空白图片字段(如果任其空白则导出的excel无法正常打开)
foreach ($list as $gk=>$gv){
if($gv['img']==""){
$list[$gk]['img']="/public/default.jpg";
}
}
//表头
$letter=$this->excelHeader($list);
//真正表头
$tableheader=array();
foreach($list[0] as $key=>$val){
array_push($tableheader,$key);
}
//数据行
$data=$this->excelData($list);
$this->excelOutput($letter,$data,$tableheader);
}
//动态生成execel表头
public function excelHeader($list){
//获取表头键名数组
$keyArr=array();
foreach($list[0] as $key=>$val){
array_push($keyArr,$key);
}
//生成表头(最大支持双字母表头,双表头数量一般足够大了)
$zm26=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");
$tableheader=array();
foreach($keyArr as $key=>$val){
if($key>25){
$key1=floor($key/25)-1;
$key2=($key%25)-1;
$key12=$zm26[$key1].$zm26[$key2];
array_push($tableheader,$key12);
}
else{array_push($tableheader,$zm26[$key]);}
}
return $tableheader;
}
//生成excel数据行($getData:thinkphp获取的数据结果集,也是一个数组)
public function excelData($getData){
$data=array();
foreach($getData as $key=>$val){
$tmpArr=array();
foreach($val as $xk=>$xv){
if(!$xv){$xv="Null";}
array_push($tmpArr,$xv);
}
array_push($data,$tmpArr);
}
return $data;
}
//正式导出excel($letter:表头如ABCD,$data:数据行,$tableheader:真正表头)
public function excelOutput($letter,$data,$tableheader){
header("Content-Type:application/vnd.ms-excel;charset=UTF-8");
$excel = new PHPExcel();
//初始化图片所在列(如,a,b,c)
$imgColumn;
//填充表头信息
for($i = 0;$i < count($tableheader);$i++) {
$excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
//获取图片所在列
if($tableheader[$i]=="img"){
$imgColumn=$letter[$i];
}
}
//填充表格信息
for ($i = 2;$i <= count($data) + 1;$i++) {
//设置当前行高
$excel->getActiveSheet()->getRowDimension($i)->setRowHeight(200);
$j = 0;
foreach ($data[$i - 2] as $key=>$value) {
if($letter[$j]==$imgColumn){
/*实例化插入图片类*/
$objDrawing = new PHPExcel_Worksheet_Drawing();
/*设置图片路径*/
//这里的图片路径不能是绝对路径,必须是相对路径,所以要替换
$value=str_replace("/public","public",$value);
$objDrawing->setPath($value);
/*设置图片高度*/
$objDrawing->setHeight(200);
/*设置图片要插入的单元格*/
$objDrawing->setCoordinates("$letter[$j]$i");
/*设置图片所在单元格的格式*/
$objDrawing->setOffsetX(12);
$objDrawing->setRotation(20);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(50);
$objDrawing->setWorksheet($excel->getActiveSheet());
//设置图片单元格的值
}
else{
//设置单元格的值
$excel->getActiveSheet()->setCellValue("$letter[$j]$i",$value);
}
$j++;
}
}
$fileName=date("Y-m-d_H-i-s",time());
$fileName="excel_".$fileName.".xls";
//创建Excel输入对象
$write = new PHPExcel_Writer_Excel5($excel);
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-excel;charset=UTF-8");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header("Content-Disposition:attachment;filename='".$fileName."'");
header("Content-Transfer-Encoding:binary");
$write->save('php://output');
}
关键字词:thinkphp3.1.3,excel,导出,图片
下一篇:mysql命令行下导出数据库