PHP用PHPExcel导出有多个工作表的Excel表格(thinkPHP3.2.3)
直接上代码:
//导出excel
public function excel()
{
//引入相关文件
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.Worksheet.Drawing");
import("Org.Util.PHPExcel.Writer.Excel2007");
$model = M('user');
//用户信息
$data = $model
->field('id,alias,login_time,create_time')
->select();
$objPHPExcel = new \PHPExcel();
$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
//新建第一个工作表
$objActSheet = $objPHPExcel->getActiveSheet();
// 水平居中(位置很重要,建议在最初始位置)
// $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objActSheet->setCellValue('A1', 'alias');
$objActSheet->setCellValue('B1', '登录时间');
$objActSheet->setCellValue('C1', '注册时间');
// 设置个表格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(35);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(35);
// 垂直居中
// $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//向表格中插入数据
foreach ($data as $k => $v) {
$k += 2;
$objActSheet->setCellValue('A' . $k, $v['alias']);
$login_time = $v['login_time'] > 0 ? date('Y-m-d H:i:s', $v['login_time']) : '';
$objActSheet->setCellValue('C' . $k, $login_time);
$create_time = $v['create_time'] > 0 ? date('Y-m-d H:i:s', $v['create_time']) : '';
$objActSheet->setCellValue('B' . $k, $create_time);
}
//重命名表,这个名称是表格下方的名称
$objPHPExcel->getActiveSheet()->setTitle('用户行为');
//新建第二个工作表,第二个表中的数据是对第一个表中行为的统计
$objActSheet1 = $objPHPExcel->createSheet();
//这个工作表的列名我们用数据库'gift'表中的数据
$gift_list = M('gift')->field('id,listorder,title')->order('listorder asc,id desc')->select();
// Excel表格的列名数组,用于写入数据所用
$cell_name = [0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', 4 => 'E', 5 => 'F', 6 => 'G', 7 => 'H', 8 => 'I', 9 => 'J', 10 => 'K', 11 => 'L', 12 => 'M', 13 => 'N', 14 => 'O', 15 => 'P', 16 => 'Q', 17 => 'R', 18 => 'S', 19 => 'T', 20 => 'U', 21 => 'V', 22 => 'W', 23 => 'X', 24 => 'Y', 25 => 'Z', 26 => 'AA', 27 => 'AB', 28 => 'AC', 29 => 'AD', 30 => 'AE', 31 => 'AF', 32 => 'AG', 33 => 'AH', 34 => 'AI', 35 => 'AJ', 36 => 'AK', 37 => 'AL', 38 => 'AM', 39 => 'AN'];
//第一列列名是‘alias’
$objActSheet1->setCellValue('A1', 'alias');
//循环‘user’表中的数据
foreach ($data as $k => $v) {
//A列中的值都是‘user’表中的 alias 值
$objActSheet1->setCellValue('A' . ($k + 2), $v['alias']);
//循环‘gift'中的数据,生成列名,并加入数据
foreach ($gift_list as $key => $item) {
//列名,从第二列开始
$objActSheet1->setCellValue($cell_name[$key + 1] . '1', $item['title']);
// 设置表格宽度
//$objActSheet1->getColumnDimension($cell_name[$key])->setWidth(20);
//计算数量
$count = M('gift_log')->where(['user_id' => $v['id'], 'gift_id' => $item['id']])->count();
//插入数据
$objActSheet1->setCellValue($cell_name[$key + 1] . ($k + 2), $count);
}
}
//重命名表,这个名称是表格下方的名称
$objActSheet1->setTitle('中奖记录');
//新建第三个表 。。。
//$objActSheet2 = $objPHPExcel->createSheet();
//do something
//设置活动单指数到第一个表,所以Excel打开时,是第一个表
$objPHPExcel->setActiveSheetIndex(0);
$fileName = '用户表_';
$date = date("Y-m-d", time());
$fileName .= "{$date}.xls";
$fileName = iconv("utf-8", "gb2312", $fileName);
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
}
PHP用PHPExcel导出有多个工作表的Excel表格(thinkPHP3.2.3)的更多相关文章
- 导出功能在数据库内容为数字,excel表格中是汉字的时候
代码如下: @ExcelField(title = "饮水器评价",dictType = "waterer_rate" ,align = 2, sort = 2 ...
- phpExcel导出excel加超级链接的实例代码[转]
phpexcel实现的导出excel文件的代码,且可以在excel文件中加入超级链接. 说明:PHPExcel的开发包Tests目录有详细使用实例.以下代码支持中文,注意文件编码,文件保存为utf-8 ...
- phpexcel导出数字带E的解决方法
phpexcel导出数字带E的解决方法 excel之所以带E 是因为按照数字格式来显示了(数字过长的时候) 数字左边或者右边加空格就变成字符串了 那么excel就会按照字符串格式来显示了 就不会带E了
- excel怎么并排查看两个工作表
excel怎么并排查看两个工作表 excel怎么并排查看两个工作表?excel打开一个窗口想要同时查看两个工作表中的数据,类似于word中的分栏效果,该怎么实现呢?EXCEL是一个使用最多的办公软件, ...
- Excel 工作簿、工作表与单元格
工作簿 工作簿是指在 Excel 中用来存储并处理数据的文件,其扩展名是.xlsx.工作簿是由工作表组成的,每一个工作簿都可以包含一个或多个工作表,默认为 3 个工作表.Excel 2007 之前的版 ...
- PHPExcel导出工作蒲(多表合并)教程+详细代码解读
最近做了一个需求,导出统计数据,因为需要同时导出多个不同的统计数据,所以不能像以往导出数据列表一样去实现这个需求,刚好空下来就记录一下(PHPExcel导出Excel多sheet合并) 一.主要使用的 ...
- PHPExcel 多工作表 导出
//浏览器输出excel header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ...
- php:PHPExcel导出excel表格
一.动态生成的内容如何能当成文件来下载呢? 方法:1.将Content-Type设置成application/octet-stream就可以了,即[header('Content-Type: appl ...
- PHPExcel导出导入excel、csv等格式数据
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); //物资发料单明细 class Read_writ ...
随机推荐
- java实现第四届蓝桥杯错误票据
错误票据 题目描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处 ...
- 调优 | Apache Hudi应用调优指南
通过Spark作业将数据写入Hudi时,Spark应用的调优技巧也适用于此.如果要提高性能或可靠性,请牢记以下几点. 输入并行性:Hudi对输入进行分区默认并发度为1500,以确保每个Spark分区都 ...
- Java线程变量问题-ThreadLocal
关于Java线程问题,在博客上看到一篇文章挺好的: https://blog.csdn.net/w172087242/article/details/83375022#23_ThreadLocal_1 ...
- .NET 技术栈 思维导图
背景介绍 根据网上招聘网站的一些.NET技能需求,画了一个图,便于在自修和学习的过程当中有一个方向. 技能栈 Web front-end o 框架技术 ▣ Vue ▣ Bootstrap ▣ LayU ...
- redis 的简明教程
redis 结合ssm使用 一.Redis使用 1.jedis操作redis非关系型数据库 2.spring 集成redis 二.两者区别: 一.Redis使用 1.jedis操作redis非关系型数 ...
- RESTORE FILELISTONLY FROM DISK ='D:\DataSQL\BakFile\pubs.bak' _ 数据库安装工具_连载_4
在查询分析器中执行: RESTORE FILELISTONLY FROM DISK = 'D:\DataSQL\BakFile\pubs.bak'根据查询类型判断Type(D.L),再取得对应的Lo ...
- ZWave 数据包格式
ZWave Device 的过程中,其实就是对不同的 COMMAND CLASS 进行解析处理.在刚开始进入ZWAVE 开发时,为了弄清楚数据包的格式,做了下面的参考表格.不过后来发现用来抓包的 sn ...
- Android学习笔记使用Notication 显示通知
实现步骤 代码实现 创建MainActivity和DetailActivity(点击通知后要跳转的Activity),两个Activity的布局文件就是添加一张全屏的背景图,老规矩,不粘贴. Main ...
- Android学习笔记显示和隐藏ActionBar
要在应用中使用ActionBar 需要android:minSdkVersion:11以上,现在基本都可以用了 创建Android项目如果不做特殊设置默认都带有ActionBar 如果不想要Actio ...
- cb01a_c++_数据结构_顺序容器_STL_deque类
/*cb01a_c++_数据结构_顺序容器_STL_deque类deque是一个动态数组,比vector更加灵活.两者都属于动态数组deque与vector非常类似deque可以在数组开头和末尾插入和 ...