PHP与Excel 笔记
二: PHPExcel: Github上可以下载此插件包,用法如下:
前端:
//上传阅卷员Excel文件 $("#upload_member").click(function (e) { e.preventDefault(); var members_form = document.getElementById("members_form"); var formData = new FormData(members_form); $.ajax({ url: "/marking_manage/ajax_upload_members", method: "post", data: formData, dataType: "JSON", success: function (data) { //这里显示php脚本读取excel文件处理后返回的值 }, //jquery使用FormData时必须设置下面两项,否则不会成功 processData: false, // 不处理数据 contentType: false // 不设置内容类型 }) }); //下载导入阅卷员模板 $("#download_excel").click(function (e) { self.location.href = "/marking_manage/ajax_download_members" });
后端:
public function ajax_upload_members() { require_once(APPPATH . 'libraries/PHPExcel.php'); require_once(APPPATH . 'libraries/PHPExcel/IOFactory.php'); date_default_timezone_set("PRC"); $file = $_FILES; $fileName = $file['members']["tmp_name"]; $inputFileType = PHPExcel_IOFactory::identify($fileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($fileName); // 确定要读取的sheet $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); //读取帐号 $accounts = array();//保存文件中的所有帐号,实际就是A列中的所有以t开头的帐号 for ($row = 1; $row <= $highestRow; $row++) { $rowData = $sheet->rangeToArray('A' . $row . ':' . "A" . $row); $account = strtolower($rowData[0][0]); if (preg_match("/^t\d+/", $account)) { $accounts[] = $account; } } $accounts = array_unique($accounts); //过滤帐号并返回 $this->load->model("school_admin_model"); $retval = array();//返回值 foreach ($accounts as $account) { $teacher_info = $this->school_admin_model->get_admin_by_where(array("account"=>$account)); // $retval[$teacher_info["school_id"]][] = array("account"=>$teacher_info["account"], "teacher_name"=>$teacher_info['teacher_name']); $retval[$teacher_info["school_id"]][] = $teacher_info["id"]; } dexit($retval); } //下载阅卷员模板 public function ajax_download_members() { require_once(APPPATH . 'libraries/PHPExcel.php'); require_once(APPPATH . 'libraries/PHPExcel/IOFactory.php'); date_default_timezone_set("PRC"); $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '帐号') ->setCellValue('B1', '姓名') ->setCellValue('C1', '学校'); // 设置第一个sheet为工作的sheet $objPHPExcel->setActiveSheetIndex(0); // 保存Excel 2007格式文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');//如果第二个参数是"Excel5"则生成2003版本的excel文件 browser_export('xxx','browser_excel07.xls');//输出到浏览器 $objWriter->save('php://output'); } function browser_export($type, $filename) { if ($type == "Excel5") { header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件 } else { header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件 } header('Content-Disposition: attachment;filename="' . $filename . '"');//告诉浏览器将输出文件的名称 header('Cache-Control: max-age=0');//禁止缓存 }
PHP与Excel 笔记的更多相关文章
- Excel 笔记目录
前言 Excel 是微软(Microsoft)公司推出的 Office 办公系列软件的一个重要组成部分,主要用于电子表格处理,可以高效地完成各种表格和图表的设计,进行复杂的数据计算和分析. 一句科普 ...
- 【JAVA】使用Aphache poi操作EXCEL 笔记
1 下载poi,地址 http://poi.apache.org/ 选择3.9版本. 2 刚开始尝试 把poi.jar放在D:\Program Files\java\jdk1.6.0_20\lib(不 ...
- .NET操作Excel笔记
如果你新建一个项目的话,首先要添加Microsoft.Office.Core 与Microsoft.Office.Interop.Exce这两个应用,然后就能很方便的操作了,示例代码(只实现了简单的读 ...
- 【PYTHON】操作excel笔记
import xlrd book = xlrd.open_workbook('..//data//case1.xls') # 获取excel对象 print(book.sheets()) # 获取ex ...
- excel笔记
提取单元格中的数字部分 =MID(LOOKUP(1,-(1&MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1/17)),ROW($1:$15)))) ...
- 王佩丰第一讲 认识excel笔记
改变工作表表浅颜色 批量插入工作表 选择多张工作表然后插入 找到表格边界区域快捷键(找到表格的最后一行):快速到达最上下左右端 点击边框上下左右双击 从指定的位置开始冻结窗格 输入今天的日期 快捷键c ...
- excel 笔记
1.复制公式到整列(至文件尾): 当你想复制公式到整列(至文件尾)可选中有公式的单元格,待出现黑色填充柄时,双击即可
- Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据
有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义e ...
- VSTO学习笔记(十四)Excel数据透视表与PowerPivot
原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...
随机推荐
- js中this的绑定规则及优先级
一. this绑定规则 函数调用位置决定了this的绑定对象,必须找到正确的调用位置判断需要应用下面四条规则中的哪一条. 1.1 默认绑定 看下面代码: function foo() { cons ...
- promise.then, setTimeout,await执行顺序问题
promise.then VS setTimeout 在chrome和node环境环境中均输出2, 3, 1, 先输出2没什么好说的,3和1顺序让人有些意外 原因: 有一个事件循环,但是任务队列可以有 ...
- 聊聊 HashMap
数据存储底层? 数据底层具体存储是一个Node<K,V> HashMap 是基于哈希来映射的,那当映射冲突时候怎么解决? 链地址,数组+链表 HashMap 什么时候扩容? 负载因子 lo ...
- vo与po
场景: 控制层使用vo对象,数据层使用po对象,业务层负责将po对象转换成vo对象传递给控制层 vo和po对象之间转换可以用BeanUtils.copyProperties(vo, po);方法 如果 ...
- 机器学习--Xgboost调参
Xgboost参数 'booster':'gbtree', 'objective': 'multi:softmax', 多分类的问题 'num_class':10, 类别数,与 multisoftma ...
- java中接口和抽象类的异同点
抽象类和接口的区别:A:成员区别 抽象类: 成员变量:可以变量,也可以常量 构造方法:有 成员方法:可以抽象,也可以非抽象 接口: 成员变量:只可以常量,默认修饰符:public static fin ...
- 【1天】黑马程序员27天视频学习笔记【Day02】
02.01常量的概述和使用 * A:什么是常量 * 在程序执行的过程中其值不可以发生改变 * B:Java中常量的分类 * 字面值常量 * 自定义常量(面向对象部分讲) * C:字面 ...
- 小强学渲染之Unity Shader编程HelloWorld
第一个简单的顶点vert/片元frag着色器 1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...
- Celery 1
Celery是一个用Python开发的异步的分布式任务调度模块 Celery有以下优点: 简单:一但熟悉了celery的工作流程后,配置和使用还是比较简单的 高可用:当任务执行失败或执行过程中发生连接 ...
- jdbc导致的问题
遇到的问题:利用eclipse编写web project,Tomcat服务器成功开启,也通过build path导入了jdbc的路径,但是还是出现下面问题 连接数据库代码如下: 连接数据库语句没有问题 ...