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 相关文章推荐
php 获取一个月第一天与最后一天的代码
May 16 PHP
网站用php实现paypal整合方法
Nov 28 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
PHPThumb图片处理实例
May 03 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
yii的CURD操作实例详解
Dec 04 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 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乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
同学聚会老师邀请函
2014/01/28 职场文书
经济类毕业生求职信
2014/06/26 职场文书
司机个人年终总结
2015/03/03 职场文书
自主招生英文自荐信
2015/03/25 职场文书
业务员岗位职责范本
2015/04/03 职场文书
政协工作总结2015
2015/05/20 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
python之django路由和视图案例教程
2021/07/26 Python
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js