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 相关文章推荐
Apache2 httpd.conf 中文版
Dec 06 PHP
php zip文件解压类代码
Dec 02 PHP
php的字符串用法小结
Jun 08 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
解析ajax事件的调用顺序
Jun 17 PHP
PHP中多维数组的foreach遍历示例
Jun 13 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
初识ThinkPHP控制器
Apr 07 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
PHP长网址与短网址的实现方法
Oct 13 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
自己前几天写的无限分类类
2007/02/14 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
PHP小教程之实现链表
2014/06/09 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
学院书画协会部门岗位职责
2013/12/01 职场文书
主题酒店策划书
2014/01/28 职场文书
老公爱的承诺书
2014/03/31 职场文书
财务负责人任命书
2014/06/06 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
端午节寄语2015
2015/03/23 职场文书
行政二审代理词
2015/05/25 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python