ThinkPHP基于PHPExcel导入Excel文件的方法


Posted in PHP onOctober 15, 2014

本文实例讲述了ThinkPHP基于PHPExcel导入Excel文件的方法。分享给大家供大家参考。具体方法如下:

主要知识点,用PHPExcel导入Excel数据经过这几天测试还是可以,xls,xlsx都可以获取Excel的数据。
下载地址:http://phpexcel.codeplex.com/

开发思路:

1.先把Excel文件上传到服务器

2.获取服务器Excel文件内容

3.写入数据库

一、上传Excel文件,使用PHP里自带的上传方法 “\Think\Upload();”,可以很方便的实现。为此我整理下使用这个方法的最简单方式

/**

 * TODO 上传文件方法

 * @param $fileid form表单file的name值

 * @param $dir 上传到uploads目录的$dir文件夹里

 * @param int $maxsize 最大上传限制,默认1024000 byte

 * @param array $exts 允许上传文件类型 默认array('gif','jpg','jpeg','bmp','png')

 * @return array 返回array,失败status=0 成功status=1,filepath=newspost/2014-9-9/a.jpg

 */

function uploadfile($fileid,$dir,$maxsize=5242880,$exts=array('gif','jpg','jpeg','bmp','png'),$maxwidth=430){

    $upload = new \Think\Upload();// 实例化上传类

    $upload->maxSize   =     $maxsize;// 设置附件上传大小,单位字节(微信图片限制1M

    $upload->exts      =     $exts;// 设置附件上传类型

    $upload->rootPath  =     './uploads/'; // 设置附件上传根目录

    $upload->savePath  =     $dir.'/'; // 设置附件上传(子)目录

    // 上传文件

    $info   =   $upload->upload();
    if(!$info) {// 上传错误提示错误信息

        return array(status=>0,msg=>$upload->getError());

    }else{// 上传成功

        return array(status=>1,msg=>'上传成功',filepath=>$info[$fileid]['savepath'].$info[$fileid]['savename']);

    }

}

这里默认上传到ThinkPHP入口文件index.php所在的文件夹uploads,此方法返回一个数据,状态status=1时为成功,也建议大家在写功能模块时或做封装时,整个系统的在架构初期应该有约定,在必要的情况下返回值用数组形式,成功返回

return array(status=>1,data=>....,info=>.....)

失败时可以返回
array(status->0,info=>'可以说明出错的原因',....)

这样用统一的方式有利于规范开发,团队协作时看代码时可以提高效率,减少思维运转,说远了,上传的方法调用方式如下:
//excel 文件

if(!empty($_FILES['xls']['name'])){

    $upload=uploadfile('xls','tempxls',5242880,array('xls','xlsx'));

    if($upload['status']){

 $path=$upload['filepath'];

    }else{

 $this->error($upload['msg']);

    }

}

二、获取Excel数据

1.首先需要引入PHPExcel的类库

require_once 'module/PHPExcel/Classes/PHPExcel/IOFactory.php';

2.获取Excel第0张表即(Sheet1)

//获取excel文件

$objPHPExcel = \PHPExcel_IOFactory::load("uploads/$path");

$objPHPExcel->setActiveSheetIndex(0);

$sheet0=$objPHPExcel->getSheet(0);

3.获取行数,并把数据读取出来$data数组

$rowCount=$sheet0->getHighestRow();//excel行数

$data=array();

for ($i = 2; $i <= $rowCount; $i++){

    $item['name']=$this->getExcelValue($sheet0,'A'.$i);

    $item['sex']=$this->getExcelValue($sheet0,'B'.$i);

    $item['contact']=$this->getExcelValue($sheet0,'C'.$i);

    $item['remark']=$this->getExcelValue($sheet0,'D'.$i);

    $item['addtime']=$this->getExcelValue($sheet0,'E'.$i);
    $data[]=$item;

}

三、最后保存到数据库

$success=0;

$error=0;

$sum=count($data);

foreach($data as $k=>$v){

    if(M('temp_area3')->data($v)->add()){

 $success++;

    }else {

 $error++;

    }

}
echo "总{$sum}条,成功{$success}条,失败{$error}条。";

至此大功告成!希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
如何设置mysql允许外网访问
Jun 04 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
php使用百度翻译api示例分享
Jan 31 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
CI框架简单邮件发送类实例
May 18 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
ThinkPHP分页实例
Oct 15 #PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 #PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 #PHP
PHP实现文件下载断点续传详解
Oct 15 #PHP
PHP多进程编程实例
Oct 15 #PHP
PHP实现采集中国天气网未来7天天气
Oct 15 #PHP
跟我学Laravel之视图 &amp; Response
Oct 15 #PHP
You might like
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
Laravel实现表单提交
2017/05/07 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
Python函数学习笔记
2008/10/07 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
python动态规划算法实例详解
2020/11/22 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
成品仓管员工作职责
2013/12/29 职场文书
军神教学反思
2014/02/04 职场文书
摄影助理岗位职责
2014/02/07 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis