thinkphp3.23整合phpexcel
HINKPHP3.2.3整合PHPexcel实现数据的导入导出。可以上传excel文件后批量导入到数据库,兼容.xls和.xlsx格式;数据库里的数据可以按照搜索条件和分页导出为excel文件。
最近接了一个小活,客户要求实现既可以手工录入数据又可以excel文件上传后批量导入到数据库,要求兼容.xls和.xlsx格式;数据库里的数据可以按照搜索条件和分页导出为excel文件。比较麻烦的是excel里的一个机型字段是一对多的,即一个产品对应多个机型,是按照逗号分隔的,导入时要先将机型分隔成数组,然后再判断该机型是否存在,不存在就插入到机型表里,存在则获取到该机型对应的id,然后将id用逗号拼接成字符串存入数据库中。特将代码公开,以方便大家学习。
源码里包含PHPExcel组件,一个控制器文件和一个视图文件,PHPExcel和PHPExcel.class.php放入thinkphp的Library/Org/Util/目录下。
一:去官网http://phpexcel.codeplex.com/下载最新PHPExcel

文件存放

ExcelReader类:
<?php
namespace Lib;
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.Reader.Excel5");
import("Org.Util.PHPExcel.Reader.Excel2007");
class ExcelReader {
/**
* 读取excel
* @param unknown_type $excelPath:excel路径
* @param unknown_type $allColumn:读取的列数
* @param unknown_type $sheet:读取的工作表
*/
public static function reader_excel($excelPath, $allColumn = 0, $sheet = 0) {
$excel_arr = array(); //默认用excel2007读取excel,若格式 不对,则用之前的版本进行读取
$PHPReader = new \PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($excelPath)) {
$PHPReader = new \PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($excelPath)) {
//返回空的数组
return $excel_arr;
}
} //载入excel文件
$PHPExcel = new \PHPExcel();
$PHPExcel = $PHPReader->load($excelPath); //获取工作表总数
$sheetCount = $PHPExcel->getSheetCount(); //判断是否超过工作表总数,取最小值
$sheet = $sheet < $sheetCount ? $sheet : $sheetCount; //默认读取excel文件中的第一个工作表
$currentSheet = $PHPExcel->getSheet($sheet); if(empty($allColumn)) {
//取得最大列号,这里输出的是大写的英文字母,ord()函数将字符转为十进制,65代表A
$allColumn = ord($currentSheet->getHighestColumn()) - 65 + 1;
} //取得一共多少行
$allRow = $currentSheet->getHighestRow(); //从第二行开始输出,因为excel表中第一行为列名
for($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
for($currentColumn = 0; $currentColumn <= $allColumn - 1; $currentColumn++) {
$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
$excel_arr[$currentRow - 2][$currentColumn] = $val;
}
} //返回二维数组
return $excel_arr;
}
} ?>
导出
$resultPHPExcel = new PHPExcel();
//设置参数
//设值
$resultPHPExcel->getActiveSheet()->setCellValue('A1', 'id');
$resultPHPExcel->getActiveSheet()->setCellValue('B1', '省');
$resultPHPExcel->getActiveSheet()->setCellValue('C1', '市');
$resultPHPExcel->getActiveSheet()->setCellValue('D1', '区');
$i = 2;
foreach($data as $item){
$resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['id']);
$resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['province']);
$resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['city']);
$resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['district']);
$i ++;
}
//设置导出文件名
$outputFileName = 'total.xls';
$xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel);
//ob_start(); ob_flush();
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$outputFileName.'"');
header("Content-Transfer-Encoding: binary");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$xlsWriter->save("20160623.xls");
thinkphp3.23整合phpexcel的更多相关文章
- thinkphp3.2整合phpexcel
由于thinkphp3.2使用命名空间,而 PHPExcel没有使用,那么两者整合的最重要问题就是如何导入的问题. 一.PHPExcel.php和PHPExcel文件夹都放在ThinkPHP/Libr ...
- thinkphp3.2与phpexcel带图片生成 完美案例
thinkphp3.2与phpexcel完美案例 // 导出exl public function look_down(){ $id = I('get.id'); $m = M ('offer_goo ...
- 基于ThinkPHP3.23的简单ajax登陆案例
本文将给小伙伴们做一个基于ThinkPHP3.2.的简单ajax登陆demo.闲话不多说.直接进入正文吧. 可能有些小伙伴认为TP自带的跳转页面挺好,但是站在网站安全的角度来说,我们不应该让会员看到任 ...
- ThinkPHP3.2.3 PHPExcel读取excel插入数据库
版本 ThinkPHP3.2.3 下载PHPExcel 将这两个文件放到并更改名字 excel文件: 数据库表: CREATE TABLE `sh_name` ( `name` varchar(255 ...
- thinkphp3.2和phpexcel导入
先整个最基础的代码,理解了这个,后面的就非常简单了 $file_name= './Upload/excel/123456.xls'; import("Org.Util.PHPExcel&qu ...
- thinkphp3.2与phpexcel基础生成
public function ff(){ import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Workshee ...
- thinkphp3.2与phpexcel解析
1.impot导入 第一种方式: import("Org.Util.PHPExcel.TextT"); $tt = new \TextT(); //创建PHPExcel对象,注意, ...
- ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate
PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言.可以使用它来读取.写入不同格式的电子表格 本次只做数据导出功能的 ...
- Thinkphp3.23 连接MSSQL方法
Thinkphp 3.23要连接MSSQL,必须配置下,以下是主要的步骤. 1.要安装Microsoft Drivers for PHP for SQL Server驱动 下载驱动以前,要查看一下ph ...
随机推荐
- 十大众筹PC:硅谷新生代如何打造下一代计算机
十大众筹PC:硅谷新生代如何打造下一代计算机 来源:CNET科技资讯网 众筹革命已经让众多吸引人的台式机,笔电和平板PC诞生.下面就是最引人注意和最成功的典范. 尽管PC市场不再象过去那样是一 ...
- POJ3083 Children of the Candy Corn(搜索)
题目链接. 题意: 先沿着左边的墙从 S 一直走,求到达 E 的步数. 再沿着右边的墙从 S 一直走,求到达 E 的步数. 最后求最短路. 分析: 最短路好办,关键是沿着墙走不太好想. 但只要弄懂如何 ...
- BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3106 Solved: 1724[Submit][Statu ...
- Java 8 表示两个时间点距离
Java JDK8 的 java.time API 提供全面的 date 和 time 的模型. 下面是一个使用案例:求两个时间点的距离. package com.tony.test; import ...
- java笔记11之二维数组
格式1: 二维数组:就是元素为一维数组的一个数组 数据类型[][] 数组名 = new 数组类型[m][n] 其中m为行 n为列 注意: A:以下格式也可以表示二维数组 a:数据 ...
- javascript表单行为效果展示
效果如下 以上效果是在点击下一步的时候触发的效果显示 代码如下 ////加工厂$(function() { $("#planttwo").click(function () { v ...
- CSS3之渐变Gradient
渐变是CSS3中比较好玩的属性,学会了渐变,那么可以做出非常炫的东东哟.CSS3 中渐变——Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...
- [转] 关于SIGPIPE导致的程序退出
PS: 如果服务器程序不忽略SIGPIPE,在某些时候TCP writer收到这个信号,会导致进程退出 The rule that applies is: When a process writes ...
- web页面缓存技术之Local Storage
业务:检测页面文本框的值是否有改变,有的话存入缓存,并存储到数据库,这样用户异常操作后再用浏览器打开网页,就可避免重新填写数据 数据库表:Test,包含字段:PageName,PageValue BL ...
- centos6 安装vsftpd
centos6 安装vsftpd vsftpd一般选择yum安装,以下是安装和配置过程 如果是centos6想要安装的话一般是编译安装 1.安装 yum安装 yum install vsftpd 编译 ...