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,',');
...
转载于:https://www.cnblogs.com/chrdai/p/6090322.html
phpexcel生成excel并下载相关推荐
- 【PHP】PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数)
[PHP]PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数) 前言 由于业务需要,我们需要从业务中汇总数据,并生成Excel文件. 思路是这样的 PHP要导出Excel表格文件 ...
- 【微信小程序】生成excel并下载 | 微信 | excel | 文件下载 |
生成excel并下载 有一个需求就是通过微信云数据库导出数据到excel并且下载到本地.首先对这个任务进行分解. 一 通过云数据库读取数据生成excel 在前端页面index.wxml添加按钮,绑定函 ...
- java动态生成excel_java动态生成excel打包下载
@SuppressWarnings("unchecked")public String batchExport() throwsDBException{ @SuppressWarn ...
- 根据excel列动态创建mysql表_根据数据库字段动态生成excel模版下载,上传模版获取数据存入数据库(poi 反射)...
环境:mysql5.7.28 java8 Spring boot 2.2.4 mybatis-plus3.10 动态:根据需求,用户可以选择对应的字段生成excle模版 下载 poi 反射:poi是e ...
- 使用PHPExcel生成Excel文件和图表
After my article "How To Make Microsoft Word Documents with PHP" (using Interop capability ...
- php ajax生成excel并下载
目标:使用php,通过ajax请求的方式生成一个excel,然后下载. 思路:大致思路是发送一个ajax请求到后台,后台php处理后生成一个excel文件,然后把生成的文件放到一个临时目录,然后把文件 ...
- java后台生成excel_Java后台生成Excel前台下载
Java后台通过poi生成HSSFWorkbook 对生成HSSFWorkbook 类型处理 转为文件流通过response 返回到前台 HSSFWorkbook hw = null; try{ hw ...
- java通过poi生成excel并下载出现文件打不开、文件格式和文件扩展名无效问题的分析与解决
需求描述: 需要完成这样一个功能:后台通过poi生成excle,前台点击按钮可直接下载. 代码逻辑(核心部分): 第一种: public String generatePlanExcel(@Reque ...
- Java在服务器端生成Excel并下载到本地
后台代码: @ResponseBody@RequestMapping(value = "export")public AjaxJson exportFile(Office offi ...
最新文章
- How Tomcat works — 四、tomcat启动(3)
- Java线程面试题 Top 50(转)
- 准确理解 Precision 准确率, Recall 召回率 , IoU
- mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
- 不止代码:保留道路(ybtoj 最小生成树)
- MFC实现图像灰度、采样和量化功能详解
- 信息学奥赛一本通(1177:奇数单增序列)——比较排序
- mysql获取当前时间的订单_mysql获取当前时间,及其相关操作
- 董淳光SQLITE3使用总结-转
- 【java与智能设备】01_1Android简介与环境搭建
- AD14一般使用流程
- 详解SSTI模板注入
- Linux挂载硬盘(容量大于2T)
- 猫眼电影爬虫(参考崔大的书写的)
- 华三模拟器HCL常用命令
- Raki的读paper小记:Prompting ELECTRA: Few-Shot Learning with Discriminative Pre-Trained Models
- 大整数乘法(分治法)
- mysql charset=utf-8_mysql数据库charset=utf-8
- Minitab16破解(简单)
- mip-html自动跳转页面,百度MIP技术快速入门(上)