使用PhpSpreadsheet,fastadmin实现导入Excel数据

实现excel导入功能(在fastadmin或thinkphp都可以内嵌成功,傻瓜式教程)

这是excel文件案例,亲测有效。

在这里插入图片描述

这是自定义的页面不是列表,类似详情页

在这里插入图片描述

1.composer 下载PhpSpreadsheet, 要求Php版本: ^7.1

composer require phpoffice/phpspreadsheet

2.在对应控制器里,添加上传导入方法

use PhpOffice\PhpSpreadsheet\IOFactory;     //导入Excel必须使用
use PhpOffice\PhpSpreadsheet\Spreadsheet;   //导出Excel必须使用
use think\Exception;	//建议加上这行防止读取错误时,可以返回正确格式的错误提示

3. 读取excel关键代码,此处不包含上传,上传代码可以使用ajax另外上传,返回路径后提交上来。

public function import_excel()
    {
        try {
            //获取已上传完成后的文件路径
            //类似这样  /uploads/20231007/3daa432aba544c68a0bd5748a4fea315.xls
            $file = input('post.file');
            if(empty($file)){
                $this->error('请先上传Excel文件');
            }
            //获取excel的服务器绝对路径
            //类似这样 /www/wwwroot/dj.wallsu.com/public/storage/excel/20230710
            $filePath = ROOT_PATH.'public'.$file;
            
            // 截取后缀
            $fileExtendName = substr(strrchr($file, '.'), 1);
            //判断文件类型
            if($fileExtendName != 'xls' && $fileExtendName != 'xlsx'){
                $this->error('仅支持xls,xlsx格式');
            }
            /**
             * 以下是导入Excel文件的关键代码 ----  开始
             * 下面两行代码是读取的关键,第三行是删除表头
             */
            //IOFactory调用load方法加载Excel文件
            $objReader = IOFactory::load($filePath);	//IOFactory 这样是上面 use 后出来的
            //获取其中的数据
            $excelData = $objReader->getActiveSheet()->toArray(true, true, true, true, true);
            //删除第一行元素(表头)
            array_shift($excelData);
            //定义一个空数组,下面有用
            $data = [];
            //重新改装数组为二维数组,方便批量插入数据库
            foreach ($excelData as $k=>$v){
                //判断是否为空,去掉第一行表头
                if (!empty($v)) {
                    //赋值内容到数组中   根据表格内容的列数下标从0开始
                    $data[$k]['name'] = $v['A'];   //name是字段,A是第一列,下面以此类推
                    $data[$k]['age'] = $v['B'];			
                    $data[$k]['sex'] = $v['C'];			
                    $data[$k]['borthday'] = $v['D'];
                }
            }
            /**
             * 以上是导入Excel文件的关键代码 ----  结束
             */
            if(empty($data)){
                $this->error('无有效数据');
            }
            //dump($data);	//这里是二位数组
            //写业务逻辑,保存进库
            $res = db('user')->insertAll($data);
            if($res){
            	$this->success('导入名单成功');
            }else{
            	$this->error('导入名单失败');
            }
        }catch(\Exception $e){
            $this->error($e->getMessage());
        }
    }

OK,结束!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏日不热

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值