控制层

//卖场销售明细,导出Excel
public function store_detail()
{$data = input("get.");$list = $this->storeOrderModel->getStoreModel($data);$firstRowTitle = '卖场销售明细(';$start_str = empty($data['start']) ? ' - ' : $data['start'];$end_str = empty($data['end']) ? ' - ' : $data['end'];$firstRowTitle .= '时间:' . $start_str . '至' . $end_str;$firstRowTitle .= ')';down_excel($list, '卖场销售明细表', $firstRowTitle, ['门店编号', '门店名称', '销售总额'], [20, 28, 20]);}

模型层

/*** 卖场销售明细* @param $data*/public function getStoreModel($data){//步骤1:从store_order表,查询订单价格,购买日期,导购员id,list//步骤2:遍历list,根据userid,下单时间data,从表store_countoff查找门店id。//步骤3:根据门店id,去store表,找到需要的门店名称,和store_gene_id,并赋值给新数组array// 步骤4: 遍历array数组将金额累加得到门店的总金额;$where = [];foreach ($data as $k => $v) {if ($v === 0) {continue;}if (empty($v)) {unset($data[$k]);}}if (!empty($data['start'])&&!empty($data['end'])){$start = strtotime($data['start']);$end = strtotime($data['end']);$where['create_time'] = ['between', [$start, $end]];}if(!empty($data['start'])&&empty($data['end'])){$start = strtotime($data['start']);unset($data['start']);$where['create_time'] = ['>=', $start];}if(!empty($data['end'])&&empty($data['start'])){$end = strtotime($data['end']);unset($data['end']);$where['create_time'] = ['<=', $end];}if (isset($data['region'])) {$where['region']=array('=',$data['region']);}$kw = [];if (!empty($data['kw'])){unset($data['kw']);}
//        return $where;//查询订单价格,购买日期,导购员id$list = db('store_order')->where($where)->field('sales_amount,purchase_date,userid')->select();$array = [];foreach ($list as $k=>$v){//根据导购员ID,下单时间在表store_countoff,查店铺ID$store_id = db('store_countoff')->where('userid',$v['userid'])->where('date',$v['purchase_date'])->distinct('store_id')->value('store_id');if (!empty($store_id)){//得到ID之后再去store表查店铺信息$store_name = db('store')->where('store_id',$store_id)->field('store_gene_id,store_name')->select();$store = $store_name[0];//讲订单的金额赋值给数组array$store['count'] = $v['sales_amount'];$array[] = $store;}}$store_id = [];   //得到所有store_id$data = [];    //新数组foreach ($array as $key => $value) {//不在数组中if (!in_array($value['store_gene_id'],$store_id)) {//store_id不存在于上面数组中,则添加该store_id到上面数组$store_id[] = $value['store_gene_id'];$data[] = $value;} else {    //在数组中//循环$data数组foreach ($data as $index => $item) {//将相同store_id的count累加起来if ($item['store_gene_id'] == $value['store_gene_id']) {$data[$index]['count'] += $value['count'];}}}}return $data;}
公共类
/*** @param $data 需要导出的数据 array* @param $titleName  工作簿的名称 string* @param $firstRowTitle  第一行头部标题 string* @param $title  设置单元格标题   array* @param $col  设置单元格宽度   array* @throws \PhpOffice\PhpSpreadsheet\Exception* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception*/
function down_excel($data, $titleName, $firstRowTitle, $title, $col = [])
{//1.创建新工作簿$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();$sheet = $spreadsheet->getActiveSheet();//默认的长度(共38个)$letter = ['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'];//获取excel->title长度$titleLen = count($data[0]);$letter_count = count($letter);  //38for ($i = $titleLen; $i <= $letter_count; $i++) {unset($letter[$i]);}//最大行数对应的$letter$maxCell = $letter[$titleLen - 1];//二维数组中的一维数组的key$array_key = [];foreach ($data as $key => $value) {foreach ($value as $k => $v) {$array_key[] = $k;}}//设置默认行高$sheet->getDefaultRowDimension()->setRowHeight(22);//设置工作表标题$sheet->setTitle($titleName);//设置第一行头部样式$titleStyleArray = ['alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER,'vertical' => Alignment::VERTICAL_CENTER,],'font' => ['name' => '宋体','size' => 14,'bold' => true]];//设置多少列 合并第一行A-V$sheet->mergeCells('A1:' . $maxCell . 1)->getStyle('A1:' . $maxCell . 1)->applyFromArray($titleStyleArray);$sheet->setCellValue('A1', $firstRowTitle)->getRowDimension('1')->setRowHeight(35);//设置单元格标题foreach ($letter as $key => $item) {$sheet->setCellValue($item . '2', $title[$key]);//垂直居中$sheet->getPageSetup()->setHorizontalCentered(true);}/*--------------开始从数据库提取信息插入Excel表中 start------------------*/$dataCount = count($data);  //计算有多少条数据//从第三行开始插入data数据for ($i = 3; $i <= $dataCount + 2; $i++) {$j = $i - 3;    //数据下标从0开始for ($z = 0; $z < $titleLen; $z++) {//设置excel数据$sheet->setCellValue('' . $letter[$z] . $i, $data[$j][$array_key[$z]]);}}/*--------------开始从数据库提取信息插入Excel表中 end------------------*///设置标题单元格格式$sheet->getStyle('A2:' . $maxCell . '2')->getFont()->setBold(true)->setName('宋体')->setSize(12);//Arial//设置列宽if ($col == []) {for ($i = 0; $i < $letter_count; $i++) {$col[$i] = 15;}}foreach ($letter as $key => $item) {$sheet->getColumnDimension($item)->setWidth($col[$key]);}//全部单元格设置对齐:水平居中对齐$styleArray = ['alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER,'vertical' => Alignment::VERTICAL_CENTER,],'font' => ['size' => 12,]];//设置所有单元格样式$sheet->getStyle('A1:' . $maxCell . (count($data) + 2))->applyFromArray($styleArray);//整个工作表设置为:自动筛选器区域$sheet->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());// 下载文件$filename = $titleName . '-' . date('YmdHis', time()) . '.xlsx';header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment;filename="' . $filename . '"');header('Cache-Control: max-age=0');$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->save('php://output');//3.从内存中清除工作簿$spreadsheet->disconnectWorksheets();unset($spreadsheet);exit;
}

php不使用框架,导出Excel,这里有代码,全解相关推荐

  1. cpu java poi 导出_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  2. 适用于主流浏览器导出Excel表格的代码

    适用于主流浏览器导出Excel表格的代码 问题描述: 有时候写项目会遇到在网页点击按钮可以把网页上显示的table表格数据从浏览器上直接下载下来, 优点是用户可以自由选择有价值的数据进行下载到用户本地 ...

  3. MSSQL数据导入导出Excel的相关代码

    MSSQL数据导入导出Excel的相关代码 参考: https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926 1 Export data to e ...

  4. java自动生成生成java透视表_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  5. java excel 透视_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  6. html实现pdf导出excel表格,一篇文章详解:Vue框架下轻松实现Excel、PDF导出

    项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...

  7. java生成excel文件步骤_java导出Excel文件的步骤全纪录

    一.背景 当前b/s模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用excel打开(电信系统.银行系统).或者是:我们已经习惯用excel打印.这样在我们实际 ...

  8. 转载:Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)

    作者: Maco   发布日期: 2006-8-28 11:09:28 (一) . 运行示例图 1. 待导出数据的GridView图: 2. 生成的Excel文件 (二). 代码 1. 前台页面 Gr ...

  9. 导出excel,前后台代码示例

    ExcelUtil工具类: package com.leigod.NNN.base.util;import org.apache.poi.hssf.usermodel.*;import javax.s ...

  10. 使用python自动生成病例数据并导出excel(附代码)

    因为实验需要处理大量的数据,便考虑进行自动生成,结果如下 代码如下 import time import random province=['河北','山西','辽宁','吉林','黑龙江','江苏' ...

最新文章

  1. 为何Redis要比Memcached好用(转)
  2. 用cascade删除有约束的表或记录
  3. 03.body_search
  4. 项目设计基础:处理过程设计相关知识介绍​
  5. 将Notepad++配置成Java轻量级的IDE
  6. 图像处理之基础---特征向量的 几何意义
  7. IOS开发-TableView表视图基础
  8. 手机 测试php代码大全,VIVO手机测试指令代码大全
  9. 计算机找不到WPS云盘,为什么我的电脑里没有WPS网盘入口?开启教程教给你!
  10. 使用浏览器检查工具下载网页视频
  11. 正则入门 掌握字符组和量词
  12. Chrome网页观看百度云视频加速
  13. android 停止服务方法,Android编程实现开始及停止service的方法
  14. 搭建简单的企业网站,华为云速建站和阿里建站哪个好?
  15. centos7 配置samba共享服务
  16. 项目质量管理工具--鱼骨图(石川图)
  17. 如何将复杂的物理建模过程化繁为简?
  18. android fragment 白屏,当应用Crash后fragment出现白屏
  19. acwing 3496. 特殊年份(蓝桥杯)
  20. 儿子于靖洋的百天照片

热门文章

  1. [休闲]GDC China 2007上海中国游戏开发者大会
  2. 在亚马逊工作是怎样一种体验?
  3. TFT液晶屏使用自建的英文字库
  4. 【CVPR2022论文阅读】Learning Affinity from Attention(待更新)
  5. leetcode加油站 Java
  6. Markdown写作工具盘点
  7. C5750X7R2E105K230KA(电容器)MSP430F5249IRGCR微控制器资料
  8. mybatis plus table doesn't exists
  9. 空间里相片批量导入u盘_怎样将U盘内相片弄到QQ空间的相册内
  10. Kickoff - 创造可扩展的,响应式的网站