layui上传Excel并读取excel中的数据入库

参考:https://www.cnblogs.com/zhenghengbin/p/9490511.html
在这里插入图片描述
1.maven依赖javascript

<!-- excel -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.11</version>
        </dependency>

2.前端html

<div class="layui-inline" style="margin-right: 0;">
      <div class="layui-input-inline" style="width:100%;">
          <button class="layui-btn layui-btn-sm" data-type="import" id="importData" onclick="javascript:return false;">导入</button>
      </div>
  </div>
  ......
   layui.config({
        base: '../../../layuiadmin/' //静态资源所在路径
    }).extend({
        index: 'lib/index' //主入口模块
    }).use(['index', 'table', 'upload', 'common'], function () {
        let table = layui.table
            , admin = layui.admin
            , common = layui.common
            , $ = layui.$
            , form = layui.form
            , layer = layui.layer
            , upload = layui.upload
        ;
         upload.render({
            elem: "#importData",//导入id
            url: "/Transaction/importData",
            accept: "file",
            exts: 'xls|xlsx|xlsm|xlt|xltx|xltm',
            before: function(obj) {
                layer.msg('文件上传中...', {
                    icon: 16,
                    shade: 0.01,
                    time: 0
                })
            },
            done: function (res) {
                layer.close(layer.msg());//关闭上传提示窗口
                if (res.code == 0) {
                }else{
                    layer.msg(res.message,{icon:5});
                }
            }
        });

    });

3.后端前端

@Slf4j
@RequestMapping(value = "/Transaction")
@Controller
public class TransactionConroller {
    @Autowired
    private TransactionHandler transactionHandler;

    // 导入
    @ApiOperation("上传")
    @RequestMapping(value = "/importData", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseBody
    public CommonResponse importData(@RequestPart(value = "file") MultipartFile file) {
        return transactionHandler.importExcel(file);
    }

}
@Slf4j
@Component
public class TransactionHandler {
    /** * 导入 * * @param file * @return */
    public CommonResponse importExcel(MultipartFile file) {
        try {
            InputStream inputStream = file.getInputStream();
            log.info("============fileName=============="+file.getOriginalFilename());
            List list = ExcelUtil.readExcel(inputStream, file.getOriginalFilename());
            inputStream.close();
            for (int i = 0; i < list.size(); i++) {
                Object object = list.get(i);
                log.info("============object=============="+object.toString());
                
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CommonResponse.success();
    }
 }
public class ExcelUtil {

    /** * 处理上传的文件 * * @param in * @param fileName * @return * @throws Exception */
    public static List readExcel(InputStream in, String fileName) throws Exception {
        List list = new ArrayList<>();
        //建立Excel工做薄
        Workbook work = getWorkbook(in, fileName);
        if (null == work) {
            throw new Exception("建立Excel工做薄为空!");
        }
        Row row = null;
        Cell cell = null;

        Sheet sheet = work.getSheetAt(0);
        // 获取第一个实际行的下标
        log.info("======sheet.getFirstRowNum()========="+sheet.getFirstRowNum());
		// 获取最后一个实际行的下标
        log.info("======sheet.getLastRowNum()========="+sheet.getLastRowNum());
        for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
            row = sheet.getRow(i);
			// 获取在某行第一个单元格的下标
            log.info("======row.getFirstCellNum()========="+row.getFirstCellNum());
			// 获取在某行的列数
            log.info("======row.getLastCellNum()========="+row.getLastCellNum());
            if (row == null || row.getFirstCellNum() == i) {
                continue;
            }
            List<Object> li = new ArrayList<>();
            for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
                cell = row.getCell(j);
                li.add(cell);
            }
            list.add(li);
        }
        work.close();//这行报错的话 看下导入jar包的版本
        return list;
    }

    /** * 判断文件格式 * * @param inStr * @param fileName * @return * @throws Exception */
    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
        Workbook workbook = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        log.info("==========fileType========"+fileType);
        if (".xls".equals(fileType)) {
            workbook = new HSSFWorkbook(inStr);
        } else if (".xlsx".equals(fileType)) {
            workbook = new XSSFWorkbook(inStr);
        } else {
            throw new Exception("请上传excel文件!");
        }
        return workbook;
    }

}