基于TP5框架的excel导入功能

简介: 准备工作:首先需要下载PHPExcel文件放入vendor目录下。

准备工作:首先需要下载PHPExcel文件放入vendor目录下。


导入功能控制器类对应的方法的书写如下所示:

public function submitData()
    {
        if (request()->isPost()) {
            require "../vendor/PHPExcel/Classes/PHPExcel.php"; //引入PHPExcel文件路径并运行文件,当文件报错时会产生一个致命错误并且终止执行,
            // vendor("PHPExcel.PHPExcel"); //处理Excel文件请求
            $file = request()->file('file');  //加载excel文件
            if (is_null($file)) {
                return $this->success("上传文件不能为空");  
            }
            $info = $file->validate(['size' => 1567800, 'ext' => 'xlsx,xls,csv'])->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel');   //validate()用于表单验证,这里验证文件后缀名称,尺寸大小
            if ($info) {
                $exclePath = $info->getSaveName(); //获取文件名
                $file_name = ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel' . DS . $exclePath; //上传文件的地址
                // $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
                // $obj_PHPExcel = $objReader->load($file_name,);//加载文件内容,编码utf-8
                $obj_PHPExcel = \PHPExcel_IOFactory::load($file_name);//$encode='utf-8' //加载文件内容,编码utf-8  
                echo "<pre>";
                $excel_array = $obj_PHPExcel->getsheet(0)->toArray(); //转换为数组格式
                array_shift($excel_array); //删除第一个数组(标题);
                //逻辑代码
                $data = [];
                $i = 0;
                foreach ($excel_array as $k => $v) {    //遍历循环excel对应的数据的数组每一列的内容
                    $data[$k]['name'] = $v[1];
                    $data[$k]['gender']=$v[2];
                    if($v[3]=='一班'){
                        $classId=1;
                    }else if($v[3]=='二班'){
                        $classId=2;
                    }else if($v[3]=='三班'){
                        $classId=3;
                    }else{
                        $classId=Null;
                    }
                    $data[$k]['class_id']=$classId;
                    // if($request->ext($v[4])=='jpg'){
                    //     echo 'ext: ' . $request->ext($v[4]);
                    // }
                    $data[$k]['photo']=$v[4];
                    $i++;
                }
                // exit;
                var_dump($data);
                $success=0;
                for($j=0;$j<$i;$j++){
                    $sql = db('student')->insert($data[$j]); //批量插入数据
                    var_dump($sql);
                    if($sql){
                       $success++;
                    }
                }
                // $success = db('student')->insertAll($data); //批量插入所有数据
                $error = $i - $success;
                echo "总{$i}条,成功{$success}条,失败{$error}条。";
            }else{
                // 上传失败获取错误信息
                echo $file->getError();
            }
        }
    }


里面一些信息需要进行一下修改。

目录
相关文章
|
1月前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
57 0
|
2月前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
|
4月前
|
前端开发 数据库
node使用node-xlsx实现excel的下载与导入,保证你看的明明白白
node使用node-xlsx实现excel的下载与导入,保证你看的明明白白
|
10天前
|
数据库
如何把Excel导入到数据库中
如何把Excel导入到数据库中
8 0
|
15天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
38 0
|
25天前
|
easyexcel 数据库
【EasyExcel】第一篇:动态导入excel,生成对应数据库表
【EasyExcel】第一篇:动态导入excel,生成对应数据库表
|
25天前
|
数据库
关于用NPOI导入Excel
关于用NPOI导入Excel
|
2月前
|
存储 数据处理 Python
用Python实现Excel中的Vlookup功能
用Python实现Excel中的Vlookup功能
33 0
|
2月前
|
存储 数据处理 数据格式
Python中导入Excel数据:全面解析与实践
Python中导入Excel数据:全面解析与实践
42 0
|
2月前
|
存储 关系型数据库 MySQL
Python导入Excel数据到MySQL数据库
Python导入Excel数据到MySQL数据库
98 0