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的更多相关文章

  1. thinkphp3.2整合phpexcel

    由于thinkphp3.2使用命名空间,而 PHPExcel没有使用,那么两者整合的最重要问题就是如何导入的问题. 一.PHPExcel.php和PHPExcel文件夹都放在ThinkPHP/Libr ...

  2. thinkphp3.2与phpexcel带图片生成 完美案例

    thinkphp3.2与phpexcel完美案例 // 导出exl public function look_down(){ $id = I('get.id'); $m = M ('offer_goo ...

  3. 基于ThinkPHP3.23的简单ajax登陆案例

    本文将给小伙伴们做一个基于ThinkPHP3.2.的简单ajax登陆demo.闲话不多说.直接进入正文吧. 可能有些小伙伴认为TP自带的跳转页面挺好,但是站在网站安全的角度来说,我们不应该让会员看到任 ...

  4. ThinkPHP3.2.3 PHPExcel读取excel插入数据库

    版本 ThinkPHP3.2.3 下载PHPExcel 将这两个文件放到并更改名字 excel文件: 数据库表: CREATE TABLE `sh_name` ( `name` varchar(255 ...

  5. thinkphp3.2和phpexcel导入

    先整个最基础的代码,理解了这个,后面的就非常简单了 $file_name= './Upload/excel/123456.xls'; import("Org.Util.PHPExcel&qu ...

  6. thinkphp3.2与phpexcel基础生成

    public function ff(){ import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Workshee ...

  7. thinkphp3.2与phpexcel解析

    1.impot导入 第一种方式: import("Org.Util.PHPExcel.TextT"); $tt = new \TextT(); //创建PHPExcel对象,注意, ...

  8. ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate

    PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言.可以使用它来读取.写入不同格式的电子表格 本次只做数据导出功能的 ...

  9. Thinkphp3.23 连接MSSQL方法

    Thinkphp 3.23要连接MSSQL,必须配置下,以下是主要的步骤. 1.要安装Microsoft Drivers for PHP for SQL Server驱动 下载驱动以前,要查看一下ph ...

随机推荐

  1. Spring Assert.notNull

    Exception in thread "main" java.lang.IllegalArgumentException: Source must not be null at ...

  2. mysql 主从 配置和同步管理

    首先呢,需要有两个mysql服务器.如果做测试的话可以在同一台机器上装两个mysql服务程序,注意要两个运行程序的端口不能一样.我用的是一个是默认的3306,从服务器用的是3307端口. 在主服务创建 ...

  3. 【HDOJ】1271 整数对

    枚举,假设这个数x=a*10^(i+1)+b*10^i+c,去掉b后y=a*10^i+c,x+y=n,则x+y=n(mod10^i),求出c,注意c<10^i,但2*c有可能大于10^i,因此分 ...

  4. -_-#【userAgent】极速模式与非极速模式存在差异

    UC浏览器 Android 极速模式 UC浏览器 Android 非极速模式

  5. 强联通 HDU 1269

    第一道强联通的题目纪念一下! 主要是模版 tarjan算法 #include <iostream> #include <cstdlib> #include <cstdio ...

  6. 【转】Linux I2C设备驱动编写(三)-实例分析AM3359

    原文网址:http://www.cnblogs.com/biglucky/p/4059586.html TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1 ...

  7. SRM468 - SRM469(1-250pt, 500pt)

    SRM 468 DIV1 250pt 题意:给出字典,按照一定要求进行查找. 解法:模拟题,暴力即可. tag:water score: 0.... 这是第一次AC的代码: /* * Author: ...

  8. tengine rpm制作

    最近又在centos6.4下折腾tengine了,刚好不久前看了rpm包的制作方法,所以又有了搞个rpm包的想法. 1 安装centos的开发环境集成包及tengine的依赖包 1 yum group ...

  9. selenium webdriver python 元素操作

    常用操作 click 点击某个元素 driver.find_element_by_id(“su”).click()   clear driver.find_element_by_id(“kw”).cl ...

  10. Cocoa Touch 层

    Cocoa Touch层包含创建 iOS应用程序所需的关键框架.上至实现应用程序可视界面,下至与高级系统服务交互,都需要该层技术提供底层基础.在开发应用程序的时候,请尽可能不要使用更底层的框架,尽可能 ...