电商商城小程序公众号开源项目:下载地址
导出表格图片

<?php
namespace service;use service\JsonService as Json;
use think\Request;class PHPExcelService
{//PHPExcel实例化对象private static $PHPExcel=null;//表头计数protected static $count;//表头占行数protected static $topNumber = 3;//表能占据表行的字母对应self::$cellkeyprotected static $cells;//表头数据protected static $data=[];//文件名protected static $title='订单导出';//行宽protected static $where=20;//行高protected static $height=50;//表行名private static $cellKey = 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','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');//设置styleprivate static $styleArray = array('borders' => array('allborders' => array(
//                PHPExcel_Style_Border里面有很多属性,想要其他的自己去看
//                'style' => \PHPExcel_Style_Border::BORDER_THICK,//边框是粗的
//                'style' => \PHPExcel_Style_Border::BORDER_DOUBLE,//双重的
//                'style' => \PHPExcel_Style_Border::BORDER_HAIR,//虚线
//                'style' => \PHPExcel_Style_Border::BORDER_MEDIUM,//实粗线
//                'style' => \PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT,//虚粗线
//                'style' => \PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT,//点虚粗线'style' => \PHPExcel_Style_Border::BORDER_THIN,//细边框//'color' => array('argb' => 'FFFF0000'),),),'font'=>['bold'=>true],'alignment'=>['horizontal'=>\PHPExcel_Style_Alignment::HORIZONTAL_CENTER,'vertical'=>\PHPExcel_Style_Alignment::VERTICAL_CENTER]);/***初始化PHPExcel类*@param $data array()*@param $fun function()* return*/private static function initialize($data,$fun){vendor("PHPExcel.PHPExcel.PHPExcel");self::$PHPExcel= new \PHPExcel();if($fun!==null && is_callable($fun)){self::$styleArray=$fun();}if(!is_array($data)) exit(Json::fail('data 为数组'));self::$data=$data;}/***设置字体格式*@param $title string 必选* return string*/public static function setUtf8($title){return iconv('utf-8', 'gb2312', $title);}/**** execl数据导出* @param  $list 需要导出的数据 格式和以前的可是一样* @param  $list 也可以为匿名函数 匿名函数参数有 $sheet PHPExcel->getActiveSheet(),self::$topNumber 从第几行设置,$cellkey 行号为数组,self::$cells现在设置的最大行号** 特殊处理:合并单元格需要先对数据进行处理*/public function setExcelContent($list=null){$sheet=self::$PHPExcel->getActiveSheet();foreach(self::$data as $key=>$val){$row=self::$cellKey[$key];$sheet->getColumnDimension($row)->setWidth(isset($val['w'])?$val['w']:self::$where);$sheet->setCellValue($row.self::$topNumber,isset($val['name'])?$val['name']:$val);}$cellkey=array_slice(self::$cellKey,0,self::$count);if($list!==null && is_array($list)){foreach ($cellkey as $k=>$v){foreach ($list as $key=>$val){if(isset($val[$k]) && !is_array($val[$k])){$sheet->setCellValue($v.(self::$topNumber+1+$key),$val[$k]);}else if(isset($val[$k]) && is_array($val[$k])){$str='';foreach ($val[$k] as $value){$str.=$value.chr(10);}$sheet->setCellValue($v.(self::$topNumber+1+$key),$str);}}}$sheet->getDefaultRowDimension()->setRowHeight(self::$height);//设置边框$sheet->getStyle('A1:'.self::$cells.(count($list)+self::$topNumber))->applyFromArray(self::$styleArray);//设置自动换行$sheet->getStyle('A4:'.self::$cells.(count($list)+self::$topNumber))->getAlignment()->setWrapText(true);}else if($list!==null && is_callable($list)){$list($sheet,self::$topNumber,$cellkey,self::$cells)->applyFromArray(self::$styleArray);}return $this;}/*** 保存表格数据,并下载* @param* @return*/public function ExcelSave(){$objWriter=\PHPExcel_IOFactory::createWriter(self::$PHPExcel,'Excel2007');$filename=self::$title.'.xlsx';ob_end_clean();header('Content-Type: application/vnd.ms-excel');header('Content-Type: application/octet-stream');header('Content-Disposition: attachment; filename="' . $filename . '"');header('Cache-Control: max-age=0');$objWriter->save('php://output');exit;}/*** 设置头部信息* @param $data array* @param $fun function() 主要设置边框的粗细* @return $this*/public static function setExcelHeader($data,$fun=null){self::initialize($data,$fun);if(self::$count=count(self::$data)){if(self::$count>count(self::$cellKey)){return Json::fail('表头长度过长');}self::$cells=self::$cellKey[self::$count-1];}else{return Json::fail('data 参数二不能为空');}return new self;}/*** 设置标题* @param $title string || array ['title'=>'','name'=>'','info'=>[]]* @param $Name string* @param $info string || array;* @param $funName function($style,$A,$A2) 自定义设置头部样式* @return $this*/public function setExcelTile($title='',$Name='',$info=[],$funName=null){//设置参数if(is_array($title)){if(isset($title['title'])) $title=$title['title'];if(isset($title['name'])) $Name=$title['name'];if(isset($title['info'])) $info=$title['info'];}if(empty($title))$title=self::$title;elseself::$title=$title;if(empty($Name)) $Name=time();//设置Excel属性self::$PHPExcel ->getProperties()->setCreator("Neo")->setLastModifiedBy("Neo")->setTitle(self::setUtf8($title))->setSubject($Name)->setDescription("")->setKeywords($Name)->setCategory("");self::$PHPExcel ->getActiveSheet()->setCellValue('A1', $title);//文字居中self::$PHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);self::$PHPExcel->getActiveSheet()->getStyle('A2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);self::$PHPExcel->setActiveSheetIndex(0);self::$PHPExcel->getActiveSheet()->setTitle($Name);self::$PHPExcel->getActiveSheet()->setCellValue('A2',self::setCellInfo($info));//合并表头单元格self::$PHPExcel->getActiveSheet()->mergeCells('A1:'.self::$cells.'1');self::$PHPExcel->getActiveSheet()->mergeCells('A2:'.self::$cells.'2');self::$PHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(40);self::$PHPExcel->getActiveSheet()->getRowDimension(2)->setRowHeight(20);//设置表头行高if($funName!==null && is_callable($funName)){$fontstyle=self::$PHPExcel->getActiveSheet();$funName($fontstyle,'A1','A2');}else{//设置表头字体self::$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('黑体');self::$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);self::$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);self::$PHPExcel->getActiveSheet()->getStyle('A2')->getFont()->setName('宋体');self::$PHPExcel->getActiveSheet()->getStyle('A2')->getFont()->setSize(14);}self::$PHPExcel->getActiveSheet()->getStyle('A3:'.self::$cells.'3')->getFont()->setBold(true);return $this;}/*** 设置第二行标题内容* @param $info  array (['name'=>'','site'=>'','phone'=>123] || ['我是表名','我是地址','我是手机号码'] ) || string 自定义* @return string*/private static function setCellInfo($info){$content=['操作者:','导出日期:'.date('Y-m-d',time()),'地址:','电话:'];if(is_array($info) && !empty($info)){if(isset($info['name'])){$content[0].=$info['name'];}else{$content[0].=isset($info[0])?$info[0]:'';}if(isset($info['site'])){$content[2].=$info['site'];}else{$content[2].=isset($info[1])?$info[1]:'';}if(isset($info['phone'])){$content[3].=$info['phone'];}else{$content[3].=isset($info[2])?$info[2]:'';}return implode(' ',$content);}else if(is_string($info)){return empty($info)?implode(' ',$content):$info;}}
}

用法示例:

PHPExcelService::setExcelHeader(['订单号','性别','电话','收货人姓名','收货人电话','收货地址','商品信息','总价格','实际支付','邮费','优惠金额','支付状态','支付时间','订单状态','下单时间','用户备注'])->setExcelTile('订单导出'.date('YmdHis',time()),'订单信息'.time(),' 生成时间:'.date('Y-m-d H:i:s',time()))->setExcelContent($export)->ExcelSave();

$export 为数组变量,变量格式为:

array(2) {[0]=>array(16) {[0]=>string(21) "wx2019071611093410001"[1]=>string(3) "男"[2]=>NULL[3]=>string(4) "1123"[4]=>string(11) "13055558888"[5]=>string(30) "上海 闸北区 城区 123123"[6]=>array(1) {[0]=>string(48) "无线吸尘器F8 玫瑰金礼盒版  [1 * 0.10]"}[7]=>string(4) "0.10"[8]=>string(4) "0.10"[9]=>string(4) "0.00"[10]=>string(4) "0.00"[11]=>string(12) "余额支付"[12]=>string(15) "2019/0716 11:09"[13]=>string(9) "待收货"[14]=>string(19) "2019-07-16 11:09:34"[15]=>string(0) ""}[1]=>array(16) {[0]=>string(21) "wx2019070209390010001"[1]=>string(3) "男"[2]=>NULL[3]=>string(6) "刘强"[4]=>string(11) "18092217410"[5]=>string(37) "北京市 北京市 东城区 1823号"[6]=>array(1) {[0]=>string(22) "测撒测试  [1 * 10]"}[7]=>string(5) "10.00"[8]=>string(5) "10.00"[9]=>string(4) "0.00"[10]=>string(4) "0.00"[11]=>string(12) "余额支付"[12]=>string(15) "2019/0702 09:39"[13]=>string(9) "待评价"[14]=>string(19) "2019-07-02 09:39:00"[15]=>string(0) ""}
}

TP5 PHPExcel导出类相关推荐

  1. tp5 PHPExcel数据导出

    项目场景: 项目场景:tp5 PHPExcel数据导出 将下载好的PHPExcel 放到extend下: Loader::import('phpexcel.PHPExcel', EXTEND_PATH ...

  2. phpexcel导出超过26列解决方案

    phpexcel导出超过26列解决方案 原文:phpexcel导出超过26列解决方案 将列的数字序号转成字母使用,代码如下:   PHPExcel_Cell::stringFromColumnInde ...

  3. 使用phpexcel导出excel常用函数

    下面主要总结了在工作中,我们利用phpexcel导出excel时常用的函数方法. <?php// 这边需要引入你自己的phpexcel内库 include_once './phpexcel/PH ...

  4. phpexcel导出-PHP_XLSXWriter

    phpexcel导出-PHP_XLSXWriter PHP_XLSXWriter 浏览器导出 cli导出 PHP_XLSXWriter PHP_XLSXWriter 是一个轻量级的 PHP Excel ...

  5. PHPExcel导出excel

    PHPExcel导出excel 如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312: $yourStr = mb_convert_ ...

  6. js+PHP利用PHPExcel导出表格数据到excel

    这里写自定义目录标题 前言 通过js筛选出表格数据 PHP利用PHPExcel导出表格数据到excel 前言 因为在开发平台的时候遇到了需要将表格数据导出到Excel的情况,通过百度找到了PHP插件P ...

  7. dll的概念、dll导出类(转)

    1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接库与 ...

  8. php 报错乱码,thinkphp3 phpexcel 导出报错乱码清除ob

    这里写自定义目录标题 phpexcel 导出部分 $fileName = '用户信息'; $date = date("Y-m-d",time()); $fileName .= &q ...

  9. 关于PHPExcel导出Excel时身份证,数字会导出为科学计数的处理方法

    原文:关于PHPExcel导出Excel时身份证,数字会导出为科学计数的处理方法 上次在开发一个项目时,用到PHPExcel导出数据,其中有导出身份证等长串数字时导出的Excel中显示为科学计数方式. ...

最新文章

  1. 理清那么多个OO(面向对象)
  2. ArcMap 通过DEM获取高程值
  3. 首次在观测中证实霍金黑洞面积定理!他们从引力波中算出黑洞真实面积
  4. leetcode算法题--从尾到头打印链表
  5. c语言程序设计指针进阶,C语言及程序设计进阶例程-15 指向结构体的指针
  6. continue和break的区别
  7. 命令行选项解析函数:getopt()
  8. DL框架之darknet:深度学习框架darknet的简介、安装、使用方法的详细攻略
  9. 【深度学习】利用深度学习进行时间序列预测
  10. 腾讯云前端性能优化大赛火热招募中!
  11. 报错apachectl -t
  12. linux mysql udf打包_Linux下MySQL 5.1编写UDF 并运行(Install)获取当前时间的毫秒数...
  13. 爬虫-08-requests使用入门-利用发送post与get请求
  14. 95-140-102-源码-transform-算子Map
  15. Webstorm相关设置
  16. 3D动作绑定_全息3D叶修养成记?升级打怪玩转荣耀,HE叶修体验
  17. ATS连接 https
  18. 清北第一套题(zhx)
  19. XMind8 Update9下载安装
  20. linux串口编程(termios结构体说明)

热门文章

  1. PB调用C#开发的控制台应用——实现WORD文档按页转存JPG图片
  2. 华为推送 简介 集成 MD
  3. 分享三个可以在家做的正规兼职工作,看到就是赚到
  4. 操作系统银行家算法计算机四级,【NCRE四级网络工程师】操作系统多选题
  5. 推荐下Python的IDE:PyScripter,Spyder以及使用心得分享
  6. com.sec.android.ofvi,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  7. [原][小说]我和她同居的日子 二
  8. 【SFace】《SFace: An Efficient Network for Face Detection in Large Scale Variations》
  9. 内网映射软件之80端口映射和全端口映射实现发布网站访问内网
  10. 纯前端实现文件下载功能