www.7727s.com_金沙国际唯一官网_欢迎来访

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

之前写过 thinkphp整合系列之phpexcel生成生成excel文件
php生成csv格式的excel表格 两种生成excel的方法
简简单单 同学的评论需求;
这里熬夜加班加点写出一个phpexcel导入数据的方法;
示例项目:http://mobmib.com/github.mobmib.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.htmp

    /**
     * 导入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);
    }

www.7727s.com博客

www.7727s.com博客
请先登录后发表评论
  • latest comments
  • 总共73条评论
www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

我的电脑 :有个问题求解答!!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.htmp  LINE: 89

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

2017-01-22 17:28:18 回复

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

Mr、han :tp5需要怎么修改

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

云淡风晴 :多谢反馈;

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

www.7727s.com博客

李崬生 :方便交流下么

2017-03-23 16:58:22 回复

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

2016-11-23 17:08:25 回复

www.7727s.com博客

errortm :这是用的thinkphp哪个版本

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

www.7727s.com博客 www.7727s.com博客

云淡风晴 :3.2.3

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

2016-10-26 16:11:41 回复

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

云淡风晴 :excel加密的?

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

www.7727s.com博客

Lkp www.7727s.com博客师兄,我也加,963492628,跟你学习了很多东西,希望能和你交流,不会打扰到你的

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

www.7727s.com博客

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

2016-10-08 16:49:57 回复

www.7727s.com博客 www.7727s.com博客

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

2016-10-08 23:09:44 回复

www.7727s.com博客

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

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

www.7727s.com博客

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 13:34:40 回复

www.7727s.com博客 www.7727s.com博客

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

2016-10-08 23:10:04 回复

www.7727s.com博客

米兔 www.7727s.com博客这个地方还是有个问题,有的文件打印出来是这样的鬼东西、[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-16 17:15:40 回复

www.7727s.com博客

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

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

www.7727s.com博客

蜗壳 www.7727s.com博客www.7727s.com博客打算的撒大大 大阿萨德www.7727s.com博客的撒大大手打是大神大大撒大大撒大声地大神大神大神大大神

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

www.7727s.com博客

蜗壳 www.7727s.com博客

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

www.7727s.com博客

李庆发-多迪网络 :/* * 读取文件 */ 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 13:28:23 回复

www.7727s.com博客

www.7727s.com博客

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客

李庆发-多迪网络 www.7727s.com博客这个二级回复好像有点问题....

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

じ情非得ぐ已 :有道理

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

www.7727s.com博客

じ情非得ぐ已 :测试

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

www.7727s.com博客

じ情非得ぐ已 :测试1

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

www.7727s.com博客

じ情非得ぐ已 :测试2

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

www.7727s.com博客

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

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

www.7727s.com博客

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

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

www.7727s.com博客 www.7727s.com博客

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

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

www.7727s.com博客

www.7727s.com博客

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

www.7727s.com博客

_ :瞅瞅

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

www.7727s.com博客

(^_^) :看看

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

www.7727s.com博客

牧马一族 : =-

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

www.7727s.com博客

当时我就2了 :看看

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

www.7727s.com博客

zhttty :看看

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

Baidu
sogou