thinkphp整合系列之phpexcel导入excel数据

之前写过 thinkphp整合系列之phpexcel生成生成excel文件
php生成csv格式的excel表格 两种生成excel的方法
简简单单 同学的评论需求;
这里熬夜加班加点写出一个phpexcel导入数据的方法;
示例项目:https://github.com/baijunyao/thinkphp-bjyadmin
一:导入phpexcel
/ThinkPHP/Library/Vendor/PHPExcel
二:导入excel的函数

/**
 * 导入excel文件
 * @param  string $file excel文件路径
 * @return array        excel文件内容数组
 */
function import_excel($file){
    // 判断文件是什么格式
    $type = pathinfo($file);
    $type = strtolower($type["extension"]);
    $type=$type==='csv' ? $type : 'Excel5';
    ini_set('max_execution_time', '0');
    Vendor('PHPExcel.PHPExcel');
    // 判断使用哪种格式
    $objReader = PHPExcel_IOFactory::createReader($type);
    $objPHPExcel = $objReader->load($file);
    $sheet = $objPHPExcel->getSheet(0);
    // 取得总行数
    $highestRow = $sheet->getHighestRow();
    // 取得总列数
    $highestColumn = $sheet->getHighestColumn();
    //循环读取excel文件,读取一条,插入一条
    $data=array();
    //从第一行开始读取数据
    for($j=1;$j<=$highestRow;$j++){
        //从A列读取数据
        for($k='A';$k<=$highestColumn;$k++){
            // 读取单元格
            $data[$j][]=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
        }
    }
    return $data;
}

三:调用示例
先用之前文章生成excel的方法分别生成了xls和csv格式的表格放在了/Upload/excel/目录下;
当然正常导入的话;是需要用户上传excel文件的;
这里就略过上传的过程;直接写的是传入文件路径调用函数的了;
/Application/Home/Controller/IndexController.class.php

    /**
     * 导入excel数据
     */
    public function import(){
        // 导入csv格式的数据
        $data=import_excel('./Upload/excel/simple.csv');
        p($data);
        // 导入xls格式的数据
        $data=import_excel('./Upload/excel/simple.xls');
        p($data);die;
    }

//*****************************回复 李庆发-多迪网络 童鞋的分割线*******************************
2016.8.22补充:
上面的p函数是为了优化输出显示的样式:以符合人类阅读的方式打印php数组
整合到自己的项目中用var_dump代替查看即可;
2016.8.22补充:
这里将上面的import拆为两个方法;
关于phpexcel导入大文件效率的问题;
建议将xls转为csv格式的表格;
然后调用import_csv这个方法

    /**
     * 导入xls格式的数据
     * 也可以用来导入csv格式的数据
     * 但是csv建议使用 下面的import_csv 效率更高
     */
    public function import_xls(){
        $data=import_excel('./Upload/excel/simple.xls');
        p($data);
    }
    /**
     * 导入csv格式的数据
     */
    public function import_csv(){
        $data=file_get_contents('./Upload/excel/simple.csv');
        $data=explode("\r\n", $data);
        p($data);
    }

白俊遥博客

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共73条评论
白俊遥博客

你好包包丶℃ :Vendor('PHPExcel.PHPExcel');Class 'Home\Controller\PHPExcel_IOFactory' not found引入正常  PHPExcel拉到项目的Vendor里面的

2018-03-14 19:22:18 回复

白俊遥博客

没有冰激凌的夏天不完整 :excel 导入导出总结实践 http://www.combql.com/?cat=8

2017-11-08 11:06:08 回复

白俊遥博客

孙东瓜 :为什么不能读取第二个sheet,我已经修改了另外一个函数,第一个函数获取第一个表,第二个函数获取第二个但是不能读取?

2017-11-07 20:06:04 回复

白俊遥博客 白俊遥博客

云淡风晴 :试试这个?https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-files/

2017-11-07 23:47:55 回复

白俊遥博客

离散的风 :导出的excel 如果上下行数据一样就合并单元格,怎么做?如 导出的表格  单位  姓名 性别,以单位为order 导出,碰见单位一样的,就合并单元格,要怎么做?谢谢?

2017-09-28 09:08:16 回复

白俊遥博客 白俊遥博客

云淡风晴 :https://phpspreadsheet.readthedocs.io/en/develop/topics/recipes/#mergeunmerge-cells  这有合并单元格的文档;可以试试这个;

2017-11-07 23:53:56 回复

白俊遥博客

丿Dark丨灬拓 :一直报错 Class 'PHPExcel_IOFactory' not found ; 什么原因? 怎么解决 谢谢了 

2017-09-20 16:07:54 回复

白俊遥博客 白俊遥博客

云淡风晴 :没有正常导入;实在不行就手动include;

2017-09-20 22:46:50 回复

白俊遥博客

我的电脑 :有个问题求解答!!The filename ./Uploads/2017-07-12/5965dd321c2b8.xls is not recognised as an OLE file 错误位置 FILE: D:\phpStudy\WWW\borrow\ThinkPHP\Library\Vendor\PHPExcel\PHPExcel\Shared\OLERead.php  LINE: 89

2017-07-12 16:29:18 回复

白俊遥博客 白俊遥博客

云淡风晴 :搜索引擎一下这个问题;一大堆解决方案;试试看行不;

2017-07-12 23:13:35 回复

白俊遥博客

stranger :为什么我的引用一直报错,我已经把

2017-06-12 18:15:49 回复

白俊遥博客

守望`夏末 :为什么我只能读取一列呢···?

2017-06-01 16:22:31 回复

白俊遥博客

‭tangsanshui 白俊遥博客程序员都是喜欢留下自己的墨宝,为了做个自己的东西,偶尔加个班都不在话下,

2017-04-29 17:41:47 回复

白俊遥博客

LauEl :可以分享一下qq登录这些怎么做的吗

2017-04-21 23:28:01 回复

白俊遥博客

Jepson :The filename ./Upload/excel/2017-01-26/588a090b6e322.xls is not recognised as an OLE file.前辈们,你们有没有遇到这个问题??

2017-01-26 22:36:10 回复

白俊遥博客

绝言 :https://www.cnblogs.com/cqingt/p/5338023.html

2018-01-19 10:57:00 回复

白俊遥博客

Alan :哥,我毕业设计需要用到这个,能不能留个扣扣号找你

2017-01-23 01:28:18 回复

白俊遥博客 白俊遥博客

云淡风晴 :可以发我邮箱;

2017-01-28 21:14:54 回复

白俊遥博客

Mr、han :tp5需要怎么修改

2017-01-12 16:28:39 回复

白俊遥博客

Mr、han :Passed array does not specify an existing static method (class 'PHPExcel_Autoloader' not found)

2017-01-12 16:28:03 回复

白俊遥博客

‭清真猪肉罐头 白俊遥博客今天开始用管理系统,很好用,有个地方提个建议import_excel这个函数的$type = $type === 'csv' ? $type : 'Excel5';位置可以改为if ($type == 'xlsx') { $type = 'Excel2007'; } elseif ($type == 'xls') { $type = 'Excel5'; }因为我之前上传xlsx文件报错,改了之后就好了

2016-12-30 10:17:02 回复

白俊遥博客 白俊遥博客

云淡风晴 :多谢反馈;

2017-01-02 14:05:47 回复

白俊遥博客

李崬生 :方便交流下么

2017-03-24 00:58:22 回复

白俊遥博客

梵梵✅ :你好 白前辈!我往数据库插入40000条数据的时候就插入不进,10000以下就可以。能有什么房法解决吗?

2016-12-09 13:52:25 回复

白俊遥博客 白俊遥博客

云淡风晴 :40000条数据对mysql来说没有压力;可以检查插入失败的那条数据的sql;看是否有问题;

2016-12-11 21:59:01 回复

白俊遥博客

. :求一份整合5.0的。。。

2016-11-24 01:08:25 回复

白俊遥博客

errortm :这是用的thinkphp哪个版本

2016-11-03 21:38:00 回复

白俊遥博客 白俊遥博客

云淡风晴 :3.2.3

2016-11-03 23:52:14 回复

白俊遥博客

errortm :5.0的需要修改的东西多吗

2016-11-04 11:52:26 回复

白俊遥博客 白俊遥博客

云淡风晴 :其实不限制于使用什么框架的;更换下include即可;

2016-11-04 23:36:43 回复

白俊遥博客

ˉ那年那天. :大神 Class 'Admin\Controller\PHPExcel' not found 求解决

2016-11-02 18:13:39 回复

白俊遥博客 白俊遥博客

云淡风晴 :没有成功导入类;

2016-11-03 23:52:40 回复

白俊遥博客

:请问为什么我把导入excal的函数代码复制到我的项目中,同样也把PHPExcal文件复制到Vendor中了,但是在  $objReader = PHPExcel_IOFactory::createReader($type); 这一句中还是报错了 Class 'Home\Controller\PHPExcel_IOFactory' not found 。

2016-10-25 19:56:04 回复

白俊遥博客 白俊遥博客

云淡风晴 :用示例项目报错么?

2016-10-27 00:11:41 回复

白俊遥博客

有风方可飞丶 :我也遇到了同样的问题,请问您解决了吗

2017-07-26 15:40:20 回复

白俊遥博客

:我是在App\Common\Common\function.php 文件中引用的。

2017-07-26 17:00:12 回复

白俊遥博客

丿Dark丨灬拓 :你好  我和你一样的问题  请问你解决了吗  怎么解决的  

2017-09-20 16:10:08 回复

白俊遥博客

丿Dark丨灬拓 :你好  我和你一样的问题  请问你解决了吗  怎么解决的  

2017-09-20 16:10:35 回复

白俊遥博客

千翼网络--技术(37) :Decryption password incorrect 这个是什么问题昂

2016-10-19 15:19:14 回复

白俊遥博客 白俊遥博客

云淡风晴 :excel加密的?

2016-10-19 22:31:57 回复

白俊遥博客

Lkp 白俊遥博客师兄,我也加,963492628,跟你学习了很多东西,希望能和你交流,不会打扰到你的

2016-10-18 09:18:53 回复

白俊遥博客

Speech :这个是tinkphp5吗,能发一个demo 或者说吗 qq           250285636@qq.com

2016-10-09 00:49:57 回复

白俊遥博客 白俊遥博客

云淡风晴 :不好意思;这个是thinkphp3.2.3的;容我有时间了;写一份thinkphp5的;

2016-10-09 07:09:44 回复

白俊遥博客

^ω^将子拖走^ω^ :可以使用我写的,参照了大神的。地址:https://github.com/jujulike/tp5excel

2019-03-15 10:24:00 回复

白俊遥博客

o :一个 比较大的表导入后只能显示第一列的数据.不知道为什么.担心是遍历地方出问题哦 .源文件是wps编辑的xlsarray (size=7)  1 =>     array (size=1)      0 => float 1  2 =>     array (size=1)      0 => float 2  3 =>     array (size=1)      0 => float 3  4 =>     array (size=1)      0 => float 4  5 =>     array (size=1)      0 => float 5  6 =>     array (size=1)      0 => float 6  7 =>     array (size=1)      0 => float 7

2016-09-17 21:34:40 回复

白俊遥博客 白俊遥博客

云淡风晴 :比较大的表;建议使用csv格式的导入;

2016-10-09 07:10:04 回复

白俊遥博客

米兔 白俊遥博客这个地方还是有个问题,有的文件打印出来是这样的鬼东西、[2] => Array ( [0] => 506665 [1] => 12 [2] => PHPExcel_RichText Object ( [_richTextElements:PHPExcel_RichText:private] => Array ( [0] => PHPExcel_RichText_TextElement Object ( [_text:PHPExcel_RichText_TextElement:private] => 哈尔滨红肠3 ) [1] => PHPExcel_RichText_Run Object ( [_font:PHPExcel_RichText_Run:private] => PHPExcel_Style_Font Object ( [_name:protected] => 宋体 [_size:protected] => 11 [_bold:protected] => [_italic:protected] => [_superScript:protected] => [_subScript:protected] => [_underline:protected] => none [_strikethrough:protected] => [_color:protected] => PHPExcel_Style_Color Object ( [_argb:protected] => FF000000 [_parentPropertyName:protected] => [_isSupervisor:protected] => [_parent:protected] => ) [_isSupervisor:protected] => [_parent:protected] => [colorIndex] => 8 ) [_text:PHPExcel_RichText_TextElement:private] => 3 ) ) ) [3] => 哈尔滨红肠 [4] => 3344 [5] => 1 )

2016-09-17 01:15:40 回复

白俊遥博客

missU :受益了,写的很简练,谢谢白大大

2016-08-29 11:06:07 回复

白俊遥博客

蜗壳 白俊遥博客白俊遥博客打算的撒大大 大阿萨德白俊遥博客的撒大大手打是大神大大撒大大撒大声地大神大神大神大大神

2016-08-23 13:39:20 回复

白俊遥博客

蜗壳 白俊遥博客

2016-08-23 13:38:27 回复

白俊遥博客

李庆发-多迪网络 :/* * 读取文件 */ protected function goods_import($filename, $exts='xls',$classId) { //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org.Util.PHPExcel"); //创建PHPExcel对象,注意,不能少了\ $PHPExcel=new \PHPExcel(); //如果excel文件后缀名为.xls,导入这个类 if($exts == 'xls'){ import("Org.Util.PHPExcel.Reader.Excel5"); $PHPReader=new \PHPExcel_Reader_Excel5(); }else if($exts == 'xlsx'){ import("Org.Util.PHPExcel.Reader.Excel2007"); $PHPReader=new \PHPExcel_Reader_Excel2007(); } $sheetName = '考勤详细'; //只加载指定的sheet $PHPReader->setLoadSheetsOnly($sheetName); //加载文件 $PHPExcel=$PHPReader->load($filename); //载入文件 //$PHPExcel=$PHPReader->load($filename); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推 $currentSheet=$PHPExcel->getSheet(); //获取总列数 $allColumn=$currentSheet->getHighestColumn(); //获取总行数 $allRow=$currentSheet->getHighestRow(); //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始 for($currentRow=5;$currentRowgetValue(); } } $this->save_import($data,$classId); **********经过测试就是载入文件最好内存!*************

2016-08-22 21:28:23 回复

白俊遥博客

白俊遥博客

2016-08-22 14:45:18 回复

白俊遥博客

:为什么头部  会有echo。。。。

2016-08-22 14:45:03 回复

白俊遥博客 白俊遥博客

云淡风晴 :导入的过程中有echo?哪行的输出?

2016-08-22 21:02:45 回复

白俊遥博客

李庆发-多迪网络 :请问p是什么方法?thinkphp没有这个方法,应该是自己定义的,能看一下这个方法么?

2016-08-22 09:34:05 回复

白俊遥博客 白俊遥博客

云淡风晴 :是的在/Application/Common/Common/function.php文件中  http://baijunyao.com/article/20

2016-08-22 20:53:24 回复

白俊遥博客

李庆发-多迪网络 :我是用这个方法导入公司的考勤数据,当考勤记录只有100多条的时候,没啥问题,当考勤记录1000多条,就会报内存不足,用G查看发现解析excel很耗内存,大神是怎么解决的?

2016-08-22 21:00:27 回复

白俊遥博客

李庆发-多迪网络 :我是用这个方法导入公司的考勤数据,当考勤记录只有100多条的时候,没啥问题,当考勤记录1000多条,就会报内存不足,用G查看发现解析excel很耗内存,大神是怎么解决的?

2016-08-22 21:01:22 回复

白俊遥博客

李庆发-多迪网络 白俊遥博客这个二级回复好像有点问题....

2016-08-22 21:02:20 回复

白俊遥博客 白俊遥博客

云淡风晴 :把方法补充到文章的最后了;

2016-08-22 21:24:10 回复

白俊遥博客

じ情非得ぐ已 :有道理

2016-08-27 10:21:37 回复

白俊遥博客

じ情非得ぐ已 :测试

2016-08-27 10:49:23 回复

白俊遥博客

じ情非得ぐ已 :测试1

2016-08-27 10:49:42 回复

白俊遥博客

じ情非得ぐ已 :测试2

2016-08-27 10:49:53 回复

白俊遥博客

じ情非得ぐ已 :回复云淡风轻

2016-08-27 10:51:02 回复

白俊遥博客

淡白色╰一素锦流年 :怎么显示Class 'Admin\Controller\PHPExcel_IOFactory' not found错误位置FILE: D:\www\excel\Application\Admin\Controller\IndexController.class.php  LINE: 53

2016-08-22 09:28:32 回复

白俊遥博客 白俊遥博客

云淡风晴 :是整合到自己的项目中出错的么?看文件是否正常引入;

2016-08-22 20:59:12 回复

白俊遥博客

白俊遥博客

2016-08-20 14:56:41 回复

白俊遥博客

_ :瞅瞅

2016-08-18 16:59:33 回复

白俊遥博客

(^_^) :看看

2016-08-17 23:26:01 回复

白俊遥博客

牧马一族 : =-

2016-08-18 16:30:48 回复

白俊遥博客

当时我就2了 :看看

2016-08-19 15:08:52 回复

白俊遥博客

zhttty :看看

2016-09-08 13:22:42 回复