thinkphp导入excel文件

本文介绍使用ThinkPHP框架实现Excel文件的上传与数据导入过程。包括文件上传配置、读取Excel数据并展示在前端,以及将数据保存到数据库的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前做到这个导入的问题,查了thinkphp上面的方法,自己就想总结一下。

第一步当然是前台布局,布局还是很重要的

导入excel文件其实就是文件上传,只是现在这个文件是excel类型,所以下面我们要做到就是文件上传的步骤了。代码如下

    public function upload(){
        //文件上传
        $upload = new \Think\Upload();// 实例化上传类
        $upload->maxSize   =     3145728 ;// 设置附件上传大小
        $upload->rootPath  =     './Uploads/excel/'; // 设置附件上传根目录
        // 上传文件
        $info   =   $upload->upload();
        if(!$info) {
            // 上传错误提示错误信息
            $this->error($upload->getError());
        }else{
            // 上传成功 获取上传文件信息
            foreach($info as $file){
                $filename = './Uploads/excel/'.$file['savepath'].$file['savename'];
                $this->importExecl($filename);//传递文件上传的路径给这个方法,进行读取excel文件数据
                $this->display("index");
            }
        }
    }

文件上传应该都很简单,下面就是另写一个方法,用来读取excel中的数据

    //excel导入
    public function importExecl($filename)
    {
        $file = dirname(__FILE__);
        if (!file_exists($file)) {
            return array("error" => 0, 'message' => 'file not found!');
        }
        Vendor("Excel.PHPExcel.IOFactory");//引入excel类文件
        $fileType = \PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
        $objReader = \PHPExcel_IOFactory::createReader($fileType);//读取文件 读取操作对象
        $objPHPexcel = $objReader->load($filename, $encode = 'utf-8');//加载文件
        $sheetCount = $objPHPexcel->getSheetCount();//获取excel文件里有多少个sheet
        $data = array();
        for ($i = 0; $i < $sheetCount; $i++) {
            $sheet = $objPHPexcel->getSheet($i);
            $highestRow = $sheet->getHighestRow(); // 取得总行数
            $highestColumn = $sheet->getHighestColumn(); // 取得总列数
            for ($i = 2; $i <= $highestRow; $i++) {
                $item['GJAHR'] = $objPHPexcel->getActiveSheet()->getCell("A" . $i)->getValue();
                $item['MONAT'] = $objPHPexcel->getActiveSheet()->getCell("B" . $i)->getValue();
                $item['KKBER'] = $objPHPexcel->getActiveSheet()->getCell("C" . $i)->getValue();
                $item['KUNNR'] = $objPHPexcel->getActiveSheet()->getCell("D" . $i)->getValue();
                $item['NAME1'] = $objPHPexcel->getActiveSheet()->getCell("E" . $i)->getValue();
                $item['Ckje'] = $objPHPexcel->getActiveSheet()->getCell("F" . $i)->getValue();
                $item['Fl'] = $objPHPexcel->getActiveSheet()->getCell("G" . $i)->getValue();
                $item['Bf'] = $objPHPexcel->getActiveSheet()->getCell("H" . $i)->getValue();
                $item['BZ'] = $objPHPexcel->getActiveSheet()->getCell("I" . $i)->getValue();
                $data[] = $item;
            }
        }
        $this->assign('data', $data);
    }

代码上面都写了注释,最后就是将获取到的数据在前台页面中显示出来,所以要分配变量(最后得到的是一个二维数组)

 

我这里呢还有一个保存按钮,是用来将导入进来excel数据保存到对应的数据库中,下面就介绍一下如何保存,代码如下

<script>
  $("#impsave").click(function() {//单机保存按钮执行以下操作
    var implist = $("#imp").children("tr");
    var r = "";
    //这里循环得到每隔个单元格中对应的值
    for (var i = 0; i < implist.length; i++) {
        var GJAHR = implist.eq(i).children().eq(0).text();
        var MONAT = implist.eq(i).children().eq(1).text();
        var KKBER = implist.eq(i).children().eq(2).text();
        var KUNNR = implist.eq(i).children().eq(3).text();
        var NAME1 = implist.eq(i).children().eq(4).text();
        var Ckje = implist.eq(i).children().eq(5).text();
        var Fl = implist.eq(i).children().eq(6).text();
        var Bf = implist.eq(i).children().eq(7).text();
        var BZ = implist.eq(i).children().eq(8).text();
        $.ajax({
                type: "post",
                url: "{:U('Mediasetcbkhbfdr/insert')}",
                data: {GJAHR:GJAHR,MONAT:MONAT,KKBER:KKBER,KUNNR:KUNNR,NAME1:NAME1,Ckje:Ckje,Fl:Fl,Bf:Bf,BZ:BZ},
                dataType: "json",
                success: function (data) {
            if (data) {
                r = 1;
            }
        }
            })
        }
        alert("保存成功!");
    })
</script>

到这里就写完了,有什么意见可以留下你的评论哦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值