phpexcel生成excel并下载
Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use think\Loader
$objPHPExcel = new \PHPExcel(); // 创建对象
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // 水平居中
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); // 上下居中
$sheet = $objPHPExcel -> getActiveSheet();
$sheet -> getColumnDimension('A')->setWidth(22); // 设置单元格宽度
$sheet -> getColumnDimension('B')->setWidth(15);
$sheet -> getColumnDimension('C')->setWidth(15);
$sheet -> getColumnDimension('D')->setWidth(20);
$sheet -> getColumnDimension('E')->setWidth(15);
$sheet -> getColumnDimension('F')->setWidth(20);
$sheet -> getColumnDimension('G')->setWidth(10);
$sheet -> getColumnDimension('H')->setWidth(40);
$sheet->getStyle( 'A1')->getFont()->setName('Candara' ); // 设置单元格字体
$sheet->getStyle( 'A1')->getFont()->setSize(15); // 设置单元格字体大小
$sheet->getStyle( 'A1')->getFont()->setBold(true); // 字体加粗
$sheet->getStyle( 'B1')->getFont()->setName('Candara' );
$sheet->getStyle( 'B1')->getFont()->setSize(15);
$sheet->getStyle( 'B1')->getFont()->setBold(true);
$sheet->getStyle( 'B1')->getFont()->setName('Candara' );
$sheet->getStyle( 'B1')->getFont()->setSize(15);
$sheet->getStyle( 'B1')->getFont()->setBold(true);
$sheet->getStyle( 'C1')->getFont()->setName('Candara' );
$sheet->getStyle( 'C1')->getFont()->setSize(15);
$sheet->getStyle( 'C1')->getFont()->setBold(true);
$sheet->getStyle( 'D1')->getFont()->setName('Candara' );
$sheet->getStyle( 'D1')->getFont()->setSize(15);
$sheet->getStyle( 'D1')->getFont()->setBold(true);
$sheet->getStyle( 'E1')->getFont()->setName('Candara' );
$sheet->getStyle( 'E1')->getFont()->setSize(15);
$sheet->getStyle( 'E1')->getFont()->setBold(true);
$sheet->getStyle( 'F1')->getFont()->setName('Candara' );
$sheet->getStyle( 'F1')->getFont()->setSize(15);
$sheet->getStyle( 'F1')->getFont()->setBold(true);
$sheet->getStyle( 'G1')->getFont()->setName('Candara' );
$sheet->getStyle( 'G1')->getFont()->setSize(15);
$sheet->getStyle( 'G1')->getFont()->setBold(true);
$sheet->getStyle( 'H1')->getFont()->setName('Candara' );
$sheet->getStyle( 'H1')->getFont()->setSize(15);
$sheet->getStyle( 'H1')->getFont()->setBold(true);
$sheet -> setCellValue("A1",'作业题目');
$sheet -> setCellValue("B1",'作业名称');
$sheet -> setCellValue("C1",'作者');
$sheet -> setCellValue("D1",'提交时间');
$sheet -> setCellValue("E1",'批阅人');
$sheet -> setCellValue("F1",'批阅时间');
$sheet -> setCellValue("G1",'得分');
$sheet -> setCellValue("H1",'评语');
$count = isset($list->count) ? $list->count : $list->subject_count;
for($row = 0; $row < $count; $row ++) {// 向单元格中插入内容
$subjectTitle = $list->$row->subjectTitle;
$workname = $list->$row->workname;
$staffname = $list->$row->staffname;
$uptime = $list->$row->uptime;
$checkStaff = $list->$row->checkStaff;
$checktime = $list->$row->checktime;
$score = number_format($list->$row->score,2);
$number = $list->$row->comment;
$sheet -> setCellValue("A".($row+2),$subjectTitle);
$sheet -> setCellValue("B".($row+2),$workname);
$sheet -> setCellValue("C".($row+2),$staffname);
$sheet -> setCellValue("D".($row+2),$uptime);
$sheet -> setCellValue("E".($row+2),$checkStaff);
$sheet -> setCellValue("F".($row+2),$checktime);
$sheet -> setCellValue("G".($row+2),$score);
$sheet -> setCellValue("H".($row+2),$number);
}
$sheet -> setTitle('批阅列表'); if(!file_exists(config('upload_path').'/excel')){
mkdir(config('upload_path').'/excel');
chmod(config('upload_path').'/excel',0777);
}
(new \PHPExcel_Writer_Excel2007($objPHPExcel))->save(config('upload_path').'/excel/checklist.xls');
$file_name = "checklist.xls";
$contents = file_get_contents(config('upload_path').'/excel/checklist.xls');
$file_size = filesize(config('upload_path').'/excel/checklist.xls');
header("Content-type: application/octet-stream;charset=utf-8");
header("Accept-Ranges: bytes");
header("Accept-Length: $file_size");
header("Content-Disposition: attachment; filename=".$file_name);
exit($contents);
二、不用生成 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/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=工单" . "_" . $localtime . ".xls ");
header("Content-Transfer-Encoding: binary "); 请求头解释:
1、header("Pragma: public");
Pragma头域用来包含实现特定的指令
Pragma: public 意思是 响应可被任何缓存区缓存。
关于Pragma:no-cache,跟Cache-Control: no-cache相同。Pragma: no-cache兼容http 1.0 ,Cache-Control: no-cache是http 1.1提供的。因此,Pragma: no-cache可以应用到http 1.0 和http 1.1,而Cache-Control: no-cache只能应用于http 1.1.
2、header("Expires: 0");
header("Expires: 0"); 的意思是缓存已过期
Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载) 的页面,我们可以使用Expires实体报头域指定页面过期时间。例:Expires:Thu,15 Sep 2006 16:23:12 GMT
HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。如:为了让浏览器不要缓存页面,也可以利用Expires实体报关域,设置为 0
3、header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 的意思是强制页面不缓存,post-check=0, pre-check=0这两个 是 IE 5.0才有的防cache声明
Cache-Control。它用来指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache -Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max- stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。我们来说说响应消息,因为 它是服务器发出的,对于客户端和Cache System都有非常重要的意义:
Public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
no-transform 不允许转换存储系统
must-revalidate 使得客户端再次浏览当前页时必须发送相关 HTTP 头信息到服务器进行验证,然后才决定是否加载客户端本地 cache
4、header("Content-Type: application/force-download");
header("Content-Type: application/force-download"); 的意思是 强制下载
5、header("Content-Type: application/octet-stream");
不知道下载文件的类型时使用,采用二进制流
6、header("Content-Disposition: attachment;filename=附件名.xls ");
意思是 类型为附件, 附件名为 :附件名.xls
7、header("Content-Transfer-Encoding: binary "); 意思是采用二进制进行传输
Transfer-Encoding 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
8、header("Content-Range: 580-1899/1900");
Range : bytes=-70 意思是最后的70个字节
第二种Range ( 130 - 70 )-130

Content-Type : image/jpeg //文件类型
三、用数据生成 excel 并下载(不用生成临时文件)
<?php
include_once "phpexcel/PHPExcel.php";
$cfg_columns = array(
'date' => array(
'name' => '日期',
'type' => 'label',
'width' => 100
),
'name' => array(
'name' => '姓名',
'type' => 'label',
'width' => 100
),
'dept_name' => array(
'name' => '部门',
'type' => 'label',
'width' => 100
),
); $list = array(
0 => array(
'date' => '2017-12-01 10:32:45',
'name' => '张三',
'dept_name' => '研发部',
),
1 => array(
'date' => '2017-12-02 10:32:45',
'name' => '李四',
'dept_name' => '客服部',
),
2 => array(
'date' => '2017-12-03 10:32:45',
'name' => '王五',
'dept_name' => '人力资源部',
),
); $filename = 'test.xls';
header('Pragma:public');
header('Content-Type:application/x-msexecl;name="'.$filename.'"');
header('Content-Disposition:inline;filename="'.$filename.'"'); $objPHPExcel = new PHPExcel(); $objPHPExcel->getActiveSheet(0)->mergeCells('B1:D1');
$export_time = date('Y-m-d H:i:s');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '导出时间:');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('B1', $export_time); $cols = 'A';
foreach ($cfg_columns as $val){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cols++.'2',$val['name']);
} //第三行, 输出详细数据
$rows = 3;
foreach ($list as $fields){
$cols = 'A';
//按cfg_column的配置项导出
foreach ($cfg_columns as $k => $val){
if(empty( $fields[$k])){
$objPHPExcel->getActiveSheet()->setCellValue($cols++.$rows, 0);
}else{
$objPHPExcel->getActiveSheet()->setCellValue($cols++.$rows, $fields[$k]);
} } //end foreach ($cfg_column as $key => $val) $rows ++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
如果遇到需要导出的表格包含复选框等各种格式,可以先生成生个视图,在渲染视图$this->display() 之前使用header()下载,下载的文件名为 xxx.xls ,就可以将整个表格下载到excel啦。
四、读取 excel 文件内容,并变成一个由 , 分割的字符串
include_once "phpexcel/PHPExcel.php";
$filePath = $_FILES['file']['tmp_name'];
$PHPExcel = new PHPExcel();
/**默认用excel2007读取excel,若格式不对,则用之前的版本进行读取*/
$PHPReader = new PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($filePath)){
$PHPReader = new PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($filePath)){
echo 'no Excel';
return ;
}
} $PHPExcel = $PHPReader->load($filePath);
/**读取excel文件中的第一个工作表*/
$currentSheet = $PHPExcel->getSheet(0);
/**取得最大的列号*/
$allColumn = $currentSheet->getHighestColumn();
/**取得一共有多少行*/
$allRow = $currentSheet->getHighestRow();
/**从第二行开始输出,因为excel表中第一行为列名*/
$temStr = "";
for($currentRow = 2;$currentRow <= $allRow;$currentRow++){
/**从第A列开始输出*/
for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++) {
$temStr .= $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue();
$temStr .=',';
}
}
$temStr = rtrim($temStr,',');
...
phpexcel生成excel并下载的更多相关文章
- 使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
- java动态生成excel打包下载
@SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...
- Asp.net MVC 简单实现生成Excel并下载
由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式 ...
- 后台生成excel前端下载
后台生成Excel时前端获取下载 Controller控制器: package com.example.test.controller; import com.example.test.common. ...
- php ajax生成excel并下载
目标:使用php,通过ajax请求的方式生成一个excel,然后下载. 思路:大致思路是发送一个ajax请求到后台,后台php处理后生成一个excel文件,然后把生成的文件放到一个临时目录,然后把文件 ...
- ASP.NET网页生成EXCEL并下载(利用DataGrid或GridView等)
前几天要在后台查询数据库内容(用entity framework),将查询出来的信息(List或DataTable形式)转成EXCEL供用户下载.经过谷歌.百度搜索,终于搜出了一些代码.似乎可用了,结 ...
- PHPExcel生成Excel文件---提示导出文件或者文件扩展名不一致,或导出的文件或文件扩展名无效
$data = Db::name('shop_cart')->where('phone','15555555555')->select(); $objPHPExcel = new PHPE ...
- NPOI生成excel并下载
NPOI文件下载地址:http://npoi.codeplex.com/ 将文件直接引用至项目中即可,,,,, 虽然网上资料很多,但有可能并找不到自己想要的功能,今天闲的没事,所以就稍微整理了一个简单 ...
- PHPExcel 生成excel统计表格
db.php为数据库操作类, $config为数据库配置,PHPExcel版本为PHPExcel_1.8.0, php代码: $dir = dirname(__FILE__); require $d ...
随机推荐
- wtforms 使用
wtforms是一个表单模板库, 下面以修改密码表单为例简单说明其用法. 我们可以用python代码定义form的基本元素, 比如用户名/邮箱, 并给定各个元素的validation条件. 然后在re ...
- 基于zepto判断mobile的横竖屏状态
借用jquery mobile中的代码,删除了一些多余的部分,简单的基于zepto的模块 var CheckOrientation = (function(){ var win = $( window ...
- 那些你不知道的chrome URLs
Xee:我用的是七星浏览器,因为我看了很多的浏览器,它们的版本都停滞不前了: 360安全浏览器的重度用户肯定不会对 se:last (上次未关闭页面)这个页面感到陌生,即使您没有见过这个,但也一定很熟 ...
- OC第一节 —— 类和对象
一.类和对象的概念 1.1类 自己的定义: 具有相同或相似性质对象的抽象. 1.2 对象 自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机 等均可以看做是对象. 举例说明: 类 ...
- PHP命名空间入门教程
PHP5.3当中就引入了“命名空间”的概念,一直都没怎么关注和使用,其实学习它也挺简单的,看官方的教程就行了: 命名空间概述 定义命名空间 定义子命名空间 在同一个文件中定义多个命名空间 使用命名空间 ...
- Oracle 数据库1046事件
例子: session 2: SQL> connect test/test Connected. select * from v$mystat where rownum=1; 143 selec ...
- 实现简易而强大的游戏AI——FSM,有限状态机
http://blog.friskit.me/2012/05/introduction-of-fsm/ 在很久很久以前,受限于计算机性能和图形效果,游戏往往是以玩家为唯一主动对象的,玩家发出动作,游戏 ...
- [转载]JavaEE学习篇之——网络传输数据中的密码学知识以及Tomcat中配置数字证书EE
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/21716557 今天是学习JavaWeb的第二天,我们来了解什么呢?就了解一 ...
- Laravel 5.1 文档攻略 —— Eloquent: 读取器和修饰器
date_range 8月前 tag_faces Woody remove_red_eye 1483 chat0 简介 这一章其实很简单,Model的属性不是和数据表的字段一一对应吗? 那么在存储和呈 ...
- python entrypoint
entrypoint, 实际是一张匹配表.匹配简短指令和具体的python函数的执行路径.有点快捷方式的概念. 不同的是,这种快捷方式不仅可以给命令行使用,还可以供其他代码简单调用,而无需关注太多细节 ...