1.引入Loader

use think\Loader;

2.导出方法:

/**

 * excel表格导出
* @param string $fileName 文件名称
* @param array $headArr 表头名称
* @param array $data 要导出的数据
* @author static7 */ function excelExport($fileName = '', $headArr = [], $data = [], $widths=[]) {
$fileName = iconv("UTF-8", "GB2312//IGNORE", @$fileName);
$fileName .=".xls";
Loader::import('PHPExcel.PHPExcel');
Loader::import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties();
$ordA = ord('A'); //
$key2 = ord("@"); //
foreach ($headArr as $v) {
if($ordA > ord("Z"))
{
$colum = chr(ord("A")).chr(++$key2);//超过26个字母 AA1,AB1,AC1,AD1...BA1,BB1...
}else{
$colum = chr($ordA++);
}
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
}
$column = 2;
$objActSheet = $objPHPExcel->getActiveSheet();
foreach ($data as $key => $rows) { // 行写入
$ordA = ord('A');//重新从A开始
$key2 = ord("@"); //
foreach ($rows as $keyName => $value) { // 列写入
if($ordA > ord("Z"))
{
$colum = chr(ord("A")).chr(++$key2);//超过26个字母 AA1,AB1,AC1,AD1...BA1,BB1...
}else{
$colum = chr($ordA++);
}
$objActSheet->setCellValue($colum . $column, $value);
}
$column++;
}
//表格宽度
if(count($widths)){
$ordA = ord('A');//重新从A开始
$key2 = ord("@"); //
foreach ($widths as $value) { // 列写入
if($ordA > ord("Z"))
{
$colum = chr(ord("A")).chr(++$key2);//超过26个字母 AA1,AB1,AC1,AD1...BA1,BB1...
}else{
$colum = chr($ordA++);
}
$objActSheet->getColumnDimension($colum)->setWidth($value);
}
}
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//$objWriter->save('./excelFile/'.$fileName);
header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件
header('Content-Disposition: attachment;filename="'.$fileName.'"');//告诉浏览器将输出文件的名称(文件下载)
header('Cache-Control: max-age=0');//禁止缓存
$objWriter->save("php://output");
}

3.调用

                //整理显示数据
          $data[$k]['seller']=Db::table('ims_bj_shopn_member')->where('id',$v['staffid'])->value('realname');
$data[$k]['sign']=$v['sign'];
$data[$k]['title']=$v['title'];
$data[$k]['bsc']=Db::table('sys_departbeauty_relation')->alias('r')->join(['sys_department' => 'd'],'r.id_department=d.id_department','left')->where('r.id_beauty',$v['storeid'])->value('d.st_department');
$data[$k]['order_sn']="\t".$v['order_sn']."\t";
$data[$k]['p_name']=$v['p_name'];
$data[$k]['p_price']=$v['tuan_price'];
$data[$k]['insert_time']=date('Y-m-d H:i:s',$v['insert_time']);
$data[$k]['success_time']=date('Y-m-d H:i:s',$v['success_time']);
$data[$k]['status']=$statusText;
$data[$k]['fqr_pay']=$sonList[0]['pay_price'];
$data[$k]['fqr_tel']=$sonList[0]['mobile'];
$data[$k]['cantuan1']=$sonList[1]['realname'];
$data[$k]['cantuan1_tel']=$sonList[1]['mobile'];
$data[$k]['cantuan1_pay']=$sonList[1]['mobile']?$sonList[1]['pay_price']:'';
$data[$k]['cantuan1_num']=$sonList[1]['join_num'];
$data[$k]['cantuan2']=$sonList[2]['realname'];
$data[$k]['cantuan2_tel']=$sonList[2]['mobile'];
$data[$k]['cantuan2_pay']=$sonList[2]['mobile']?$sonList[2]['pay_price']:'';
$data[$k]['cantuan2_num']=$sonList[2]['join_num'];;
$data[$k]['cantuan3']=$sonList[3]['realname'];
$data[$k]['cantuan3_tel']=$sonList[3]['mobile'];
$data[$k]['cantuan3_pay']=$sonList[3]['mobile']?$sonList[3]['pay_price']:'';
$data[$k]['cantuan3_num']=$sonList[3]['join_num'];;
$searchOrder=Db::name('tuan_list')->where(['create_uid'=>$v['create_uid'],'status'=>2])->whereTime('begin_time', '<', $v['begin_time'])->count();
$data[$k]['is_first']=$searchOrder?0:1;
$data[$k]['number']=$join_num;
$seaMap['list.create_uid']=array('neq',$v['create_uid']);
$seaMap['list.status']=array('eq',2);
$seaMap['list.order_sn']=array('neq',$v['order_sn']);
$seaMap['order.uid']=array('eq',$v['create_uid']);
$searchJoinOrder=Db::name('tuan_order')->alias('order')->join('tuan_list list','order.parent_order=list.order_sn','left')->where($seaMap)->whereTime('order.insert_time', '<', $v['begin_time'])->count();
$data[$k]['is_join']=$searchJoinOrder?1:0;
       
        //调用导出
        $filename = "拼团订单列表".date('YmdHis');
$header = array ('活动发起人','所属美容师','所属门店编码','所属门店名称','所属办事处','拼购单号','拼购商品','商品总价','发起时间','成团时间','拼购状态','发起人支付金额','发起人手机号码','参团人1','手机号码','支付金额','参团人1拓客留客','参团人2','手机号码','支付金额','参团人2拓客留客','参团人3','手机号码','支付金额','参团人3拓客留客','发起人是否首次发起','参团人数','是否参加过拼团');
$widths=array('15','20','20','30','30','30','60','10','20','20','20','20','20','20','20','20','20','20','20','20','20','20','20','20','20','20','20','20');
if($data) {
excelExport($filename, $header, $data, $widths);//生成数据
        }

tp5 excel导出类的更多相关文章

  1. asp.net(C#) Excel导出类 导出.xls文件

    ---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft   Excel   11.0   Obje ...

  2. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  3. tp5 Excel导出

    1.百度搜索 PHPexcel (这是一个PHP类库) 2.下载的文件放到vendor里(这是tp5专门放置类库文件的) 下面是代码 /** * 导出 */ public function expor ...

  4. C# 实现NPOI的Excel导出

    技术点: 1.自定义attribute属性 2.通过反射取类及其属性的attribute属性值 3.NPOI包常用属性及方法(我也仅仅知道用到过的,陌生的要么见名知意,要么百度查) 实现功能点: Li ...

  5. TP5.0源生Excel导出

    PHPExcel类在TP5里边并不能很好的兼容,使用起来很麻烦. 不像是tp3.2那样直接import()加进来就能new,因为它里边的命名空间找不到.总是说undefined class. 如果是使 ...

  6. 偷懒小工具 - Excel导出公共类

    说明 最近接了一个任务,就是做一个列表的Excel导出功能.并且有很多页面都会使用这个功能. 导出的Excel大体格式如图 很简单的列表,标题加背景色,然后不同类型,显示方式不一样.对齐方式不一样.不 ...

  7. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  8. 自己写的java excel导出工具类

    最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...

  9. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

随机推荐

  1. ABAP中不修改内表参照的结构,给内表/结构体增加字段

    Situation: DATA:       itab  TYPE STANDARD TABLE OF zsrsodtla_stru1,      wa_itab TYPE zsrsodtla_str ...

  2. java 线程Thread 技术--1.5 Future与Callable

    Callable: 从官方文档说起: 通过实现callable 的called 方法可以使一个任务可以返回一个结果以及可能抛出一个异常: callable 与runnable 是相似的,可以被其他线程 ...

  3. AngularJS——第2章 模块化

    第2章 模块化 使用AngularJS构建应用时是以模块化的方式组织的,即将整个应用划分成多个小模块,各个模块有各自的职责,最终实现完整的应用. 2.1 定义应用 通过为任一HTML标签添加ng-ap ...

  4. springmvc入门(1)

    一..springmvc框架 1.什么是springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.springmvc是一个基于mv ...

  5. vue总结2

    1. 给router-link添加事件 之前用v-link 现在用 router-link 添加事件要用原生的.native修饰v-on <my-component v-on:click.nat ...

  6. webpack.base.conf.js

    var path = require('path')var utils = require('./utils')var config = require('../config')var vueLoad ...

  7. JFinal文件上传时直接使用getPara()去接受表单的数据接收到的数据一直是null?

    解决方案: 在文件上传页面form 标签中使用: enctype="multipart/form-data" 在controller类中先调用getFile系列方法才能使getPa ...

  8. 解决video标签在微信中强制全屏、微信全屏播放(Android和IOS)

    在video标签中加上代码: x5-playsinline="true" webkit-playsinline="true" playsinline=" ...

  9. JS设置CSS样式的集中方式

    1. 直接设置style的属性  某些情况用这个设置 !important值无效 如果属性有'-'号,就写成驼峰的形式(如textAlign)  如果想保留 - 号,就中括号的形式  element. ...

  10. Generate a Push Certificate

    To send Push notification to an application/device couple you need an unique device token (see the O ...