java 导入excel

使用 layui: js 端

//执行实例
    var uploadInst = upload.render({
        elem: '#btnImport'  // 按钮id
        , url: Feng.ctxPath +'/geyeDeviceNumPool/uploadExcel'
        ,accept: 'file'
        ,before:function (obj) {
        // 上传前事件
            layer.load() // 开启loading
        }
        , done: function (res) {
            //上传完毕回调
            layer.closeAll('loading'); //关闭loading
            table.reload(GeyeDeviceNumPool.tableId, {
                where: {}, page: {curr: 1}
            });
        }
        , error: function () {
            //请求异常回调
            layer.closeAll('loading'); //关闭loading
        }
    });

后端控制器:
使用 hutool poi

import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
	/**
     * 上传excel填报
     */
    @RequestMapping("/uploadExcel")
    @ResponseBody
    public ResponseData uploadExcel(@RequestPart("file") MultipartFile file) {

        try {
	        // 查看 hutool文档 , 可进行流读取, 也可以文件方式, 或者其他方式
            ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
			// 设置别名映射 , 方便读取映射为实体
            reader.addHeaderAlias("设备编码", "deviceNum");
            reader.addHeaderAlias("设备密码", "devicePwd");
            reader.addHeaderAlias("设备类型", "deviceType");

			// 是否需要读取上传excel的所有sheet内容 
			// 获取sheet 页数, 遍历读取所有sheet页的所有内容 
            List<Sheet> sheets = reader.getSheets();
            for (int i = 0; i < sheets.size(); i++) {
                reader.setSheet(i);

                List<GeyeDeviceNumPool> readAll = reader.readAll(GeyeDeviceNumPool.class);

                readAll.stream().forEach(v -> {
                    LambdaQueryWrapper<GeyeDeviceNumPool> queryWrapper = new LambdaQueryWrapper<>();
                    queryWrapper.eq(GeyeDeviceNumPool::getDeviceNum, v.getDeviceNum());
					// 判断库中是否存在, 不存在再新增
					// 数据量少使用,  多的话可以考虑把数据先全读出来, 做计算,
					// 或者考虑使用缓存, 
                    if (geyeDeviceNumPoolService.count(queryWrapper) == 0) {
                        geyeDeviceNumPoolService.save(v);
                    }
                });
            }
        } catch (Exception e) {
            throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
        }
        return ResponseData.success();
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章