携手创作,共同成长!这是我参与「掘金日新计划 · 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的方法后期也会分享
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”