phpexcel(二)导入excel文件

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

有导出。自然就有导入。功能多样化嘛。

我这里使用的是laravel5.8框架(框架老点,但是这玩意完全就是一个自定义方法,跟框架版本什么的没有关系)

    /**
     * @name: 导入excel
     * @author: camellia
     * @date: 2022-04-12
     * @param:	$filename	string	文件路径
     */
    public function importExcels($filename = '/usr/share/nginx/html/xxxx/xxxx/xxxx/xxxx/xxxx/批量解锁虚拟实验模板.xlsx')
    {
        ini_set("memory_limit", "10000M");
        //自动获取文件的类型
        $fileType = \PHPExcel_IOFactory::identify($filename);
        //获取文件读取操作对象
        $reader = \PHPExcel_IOFactory::createReader($fileType);
        // 只读去数据,忽略里面各种格式等(对于Excel读去,有很大优化)  
        // $reader->setReadDataOnly(true);  
        /*// 获取文件后缀名
        $ext = substr($filename, strrpos($filename, '.'));
        // 这个一定要判断,不然会报错。
        if ($ext == '.xls') 
        {
            //如果excel文件后缀名为.xls,导入这个类
            $reader = \PHPExcel_IOFactory::createReader('Excel5');
        } 
        else 
        {
            //如果excel文件后缀名为.xlsx,导入这个类
            $reader = \PHPExcel_IOFactory::createReader('Excel2007'); 
        }//*/
        $PHPExcel = $reader->load($filename); // 载入excel文件 
        // 循环sheet 有几个sheet  就是有几个工作表
        $data = [];
        $sheetName = [];
        foreach($PHPExcel->getSheetNames() as $key => $item)
        {//循环获取到的工作表名称
            $sheet = $PHPExcel->getSheet($key); // 读取第一個工作表 
            $highestRow = $sheet->getHighestRow(); // 取得总行数 
            $highestColumm = $sheet->getHighestColumn(); // 取得总列数 
            $array = [];
            // 循环读取每个单元格的数据
            for ($row = 2; $row <= $highestRow; $row++)
            {//行数是以第1行开始 
                $dataset = [];
                for ($column = 'A'; $column <= $highestColumm; $column++) 
                {//列数是以A列开始 
                    $dataset[] = $sheet->getCell($column.$row)->getValue();
                }             
                $array[] = $dataset;
            } 
            $data[] = $array;
            $sheetName[] = $item;
        } 
        $result['data'] = $data;
        $result['sheetName'] = $sheetName;
        return $result;        
    }

写到这里,就可以把你的excel文件中的数据读取成为一个二维数组了。

之后就是将将二维数组中的数据插入数据库。

这个就不做演示了。

如果你的excel表格中有标题。按上边的代码将excel中的数据读取出之后,你会发现,二维数组中的第一个数组是标题,这个再执行写入数据库的时候要注意。

其他的,就没有什么了。

目前我一般都不会使用直接后端导入的方法,数据安全性始终是一个比较大的问题,目前一般都是使用vue框架,使用前端xlsx组件,使用前端代码将excel文件中的数据读取出来,显示到前端,确认数据没有问题之后,再将数据写入数据库,但是,这个也会有问题,xlsx插件的体积较大,在网络不好的时候,会造成前端页面加载缓慢。

但是,这也是一种解决方式吧,至于到底使用那种方法,看各位同学自己的喜好,这东西见仁见智。

前端导出excel的方法后期也会分享 

扫描二维码关注公众号,回复: 14422481 查看本文章

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

猜你喜欢

转载自juejin.im/post/7126371304516616229