有导出。自然就有导入。功能多样化嘛。
我这里使用的是laravel5.8框架(框架老点,但是这玩意完全就是一个自定义方法,跟框架版本什么的没有关系)
php
复制代码
/** * @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的方法后期也会分享
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”