PHPExcel 导入导出

1.composer 下载 :composer require phpoffice/phpexcel

<< ++ 下载完后 把文件 :phpoffice/phpexcel/Classes 改名 PHPExecl 移动到 vendor 目录下 ++ >>


2.前端html页面:

<<< ++

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    <title>学校管理</title>

    <link rel="stylesheet" href="/static/layui/css/layui.css"  media="all">

    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>

</head>

<body>

<div class="layui-fluid" >

    <form method="post" action="" class="form-signin" enctype="multipart/form-data" >

        <input name="excel" type="file" class="form-control">

        <button class="btn btn-lg btn-primary btn-block">导入</button>

    </form>

</div>

<script src="/static/layui/layui.js" charset="utf-8"></script>

<script>

    layui.use(['laypage', 'table', 'element', 'layer', 'jquery','form'], function () {

        var table = layui.table;

        layer = layui.layer;

        laypage = layui.laypage;

        element = layui.element;

        form = layui.form;

        $=layui.$;

    });

</script>

</body>

 </html>

 ++ >>

3.控制器方法:

<< ++

// 导入学生

    public function daoru(Request $request){

        //上传excel文件

        $file = request()->file('excel');

        if(!$file){

            return view("daoru");

        }

        $ft=$file->getInfo("type");

            //halt($ft);

        if($ft !="application/vnd.ms-excel" && $ft !="application/octet-stream" &&$ft !="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"){

            return $this->error("请选择正确的excel表格");

        }

        //移到/public/uploads/excel/下

        $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel');

            //halt($info);

        //上传文件成功

        if ($info) {

            //引入PHPExcel类

            vendor('PHPExcel.PHPExcel');

            new PHPExcel();

            //获取上传后的文件名

            $fileName = $info->getSaveName();

            //获取上传文件的后缀

            $fileType = substr(strchr($fileName, "."), 1);

            //文件路径

            $filePath = 'public/uploads/excel/' . $fileName;

            //实例化PHPExcel类

            if ($fileType == 'xls') {

                $PHPReader = new \PHPExcel_Reader_Excel5(); //设置以Excel5格式(Excel97-2003工作簿)

            }

            if ($fileType == 'xlsx') {

                $PHPReader = new \PHPExcel_Reader_Excel2007();

            }

            //读取excel文件

            $objPHPExcel = $PHPReader->load(ROOT_PATH . $filePath);

            //读取excel文件中的第一个工作表

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

            $allRow = $sheet->getHighestRow();  //取得总行数

            //$allColumn = $sheet->getHighestColumn();  //取得总列数

            //从第二行开始插入,第一行是列名

            for ($j = 2; $j <= $allRow; $j++) {

                /* 编辑时启用

                $da['id'] = $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();*/

                $data['img'] = $objPHPExcel->getActiveSheet()->getCell("B" . $j)->getValue();

                $data['tel'] = $objPHPExcel->getActiveSheet()->getCell("C" . $j)->getValue();

                $data['name'] = $objPHPExcel->getActiveSheet()->getCell("D" . $j)->getValue();

                $data['sfz'] = $objPHPExcel->getActiveSheet()->getCell("E" . $j)->getValue();

                $data['school'] = $objPHPExcel->getActiveSheet()->getCell("F" . $j)->getValue();

                $data['pro_id'] = $objPHPExcel->getActiveSheet()->getCell("G" . $j)->getValue();

//                    判断接收的时间是否是float类型,如果是,转换时间戳的时候需要减掉8个小时的时差

                if( is_float($objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue())){

                    $data["create_time"] =\PHPExcel_Shared_Date::ExcelToPHP($objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue())-8*60*60;

                }else{

//                      如果是字符串类型则可直接转换时间戳

                    $data["create_time"]=strtotime($objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue());

                }

                $data['status'] = $objPHPExcel->getActiveSheet()->getCell("I" . $j)->getValue();

                $data['sex'] = $objPHPExcel->getActiveSheet()->getCell("J" . $j)->getValue();

                $data['money'] = $objPHPExcel->getActiveSheet()->getCell("K" . $j)->getValue();

                $data['vip'] = $objPHPExcel->getActiveSheet()->getCell("L" . $j)->getValue();

                $data['vip_lv'] = $objPHPExcel->getActiveSheet()->getCell("M" . $j)->getValue();

                /* 编辑时启用

                $result=Db::name('users')->where("id",$da['id'])->update($data);*/

//添加时用

                $result = Db::name("cms_member")->insertGetId($data);//保存数据,并返回主键id

                if ($result) {

// 添加时用

                    echo "第" . $j . "行导入成功,comment表第:" . $result . "条!<br/>";

                    /*编辑时启用

                    echo "第".$j."行导入成功,users表第:".$da['id']."条!<br/>";*/

                } else {

                    echo "第" . $j . "行导入失败!<br/>";

                }

            }

        } else {

            echo "导入文件失败!";

        }

      return $this->success("导入成功",url("index"));

}

++ >>

4.导出

<< ++ 

// html代码

<div class="fbutton"> <a href="{:U('Admin/comment/out')}"> <div class="add" title="导出"> <span>导出模板</span> </div> </a> </div>


// php 方法

/**

    * 导出模板

    * @throws \think\db\exception\DataNotFoundException

    * @throws \think\db\exception\ModelNotFoundException

    * @throws \think\exception\DbException

    */

    public function out()

    {

        vendor('PHPExcel.PHPExcel.Reader.Excel5');

        //实例化PHPexcel类,等同于新建一个excel

        $objPHPExcel = new \PHPExcel();

        for($i=1;$i<=3;$i++){

          if($i>1){

              $objPHPExcel->createSheet();//创建内置表

          }

        }

        $objPHPExcel->setActiveSheetIndex(0);//把新创建的sheet 设定为当前活动的sheet

      //$objPHPExcel->getActiveSheet()获取当前活动的sheet

        //给当前活动sheet 设置每列的表头

        $objPHPExcel->getActiveSheet()->

        setCellValue("A1", '评论id(添加评论不填)')->

        setCellValue("B1", '商品id(不能为空,且需与商品库一致)')->

        setCellValue("C1", 'email邮箱(请留空)')->

        setCellValue("D1", '用户名(不能为空,且与用户名一致)')->

        setCellValue("E1", '评论内容(不能为空)')->

        setCellValue("F1", '添加时间(格式为:2018/9/6 11:05:15)')->

        setCellValue("G1", 'ip地址(请留空)')->

        setCellValue("H1", '是否显示(只能为1或0;1显示,0不显示)')->

        setCellValue("I1", '父id (请留空)')->

        setCellValue("J1", '评论用户ID(不能为空,且与用户名ID一致)')->

        setCellValue("K1", '晒单图片(请留空)')->

        setCellValue("L1", '订单id(请留空)')->

        setCellValue("M1", '物流评价等级(不能为空,且只能为1-5)')->

        setCellValue("N1", '商品评价等级(不能为空,且只能为1-5)')->

        setCellValue("O1", '商家服务态度评价等级(不能为空,且只能为1-5)')->

        setCellValue("P1", '被赞数(请留空)')->

        setCellValue("Q1", '点赞用户id(请留空)')->

        setCellValue("R1", '是否匿名评价:只能是0或1;0不是,1是')->

        setCellValue("S1", '订单商品表ID (请留空)')->

        setCellValue("T1", '排序(填写100以内的数字)');

//        获取评论数据

        $data=Db::name("comment")->limit(5)->order("comment_id desc")->select();

//      halt($data);

//        循环填写excel表

        $j=2;

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

            $data["add_time"]=date('Y/n/j G:i:s',$v["add_time"]);

            $objPHPExcel->getActiveSheet()->

            setCellValue("A".$j,$v["comment_id"])->

            setCellValue("B".$j,$v["goods_id"])->

            setCellValue("C".$j,$v["email"])->

            setCellValue("D".$j,$v["username"])->

            setCellValue("E".$j,$v["content"])->

            setCellValue("F".$j,$data["add_time"])->

            setCellValue("G".$j,$v["ip_address"])->

            setCellValue("H".$j,$v["is_show"])->

            setCellValue("I".$j,$v["parent_id"])->

            setCellValue("J".$j,$v["user_id"])->

            setCellValue("K".$j,$v["img"])->

            setCellValue("L".$j,$v["order_id"])->

            setCellValue("M".$j,$v["deliver_rank"])->

            setCellValue("N".$j,$v["goods_rank"])->

            setCellValue("O".$j,$v["service_rank"])->

            setCellValue("P".$j,$v["zan_num"])->

            setCellValue("Q".$j,$v["zan_userid"])->

            setCellValue("R".$j,$v["is_anonymous"])->

            setCellValue("S".$j,$v["rec_id"])->

            setCellValue("T".$j,$v["sort"]);

            $j++;

        }

        header('Content-Type: application/vnd.ms-excel');

        header('Content-Disposition:attachment;filename="template.xls"');

// D:\shop\vendor\PHPExcel\PHPExcel\Calculation\Functions.php on line 570 的break 需删除

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

        $objWriter->save('php://output');

        $objPHPExcel->disconnectWorksheets();

    }

 ++ >>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容