实现一个excel导入功能

1首先引入poi(支持xls)和poi-ooxml(支持xlsx )我选择的3.10Final
2实现question和choose的增删改查
3静态页面和controller对接

具体实现:
1.sprint boot 加载静态页面

//解决方法:在application.properties添加静态文件路径
spring.thymeleaf.prefix=classpath:/路径/

2.静态页面

3.Action获取(拿到Sheet就可以自由发挥了。。)

 private Sheet getSheet(HttpServletRequest request)throws IOException {
        // 转型为MultipartHttpRequest:
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        // 获得文件:(根据需求不同可以打断点查看文件名)
        MultipartFile contactFile = multiRequest.getFile("file");
        //获取输入流
        final InputStream contactFileInputStream = contactFile.getInputStream();
        //获取文件名
        String name = contactFile.getOriginalFilename();
        //获取book
        Workbook workbook = null;
        if (!name.isEmpty()) {
            try {
                //工厂创建book
                workbook = WorkbookFactory.create(contactFileInputStream);
            } catch (InvalidFormatException e) {
                e.printStackTrace();
            }
        }
        //获取sheet
        Sheet sheet = null;
        if (null!=workbook) {
        //此处获取的活动页。。可以根据需求选择excel左下方的工作簿
            sheet = workbook.getSheetAt(workbook.getActiveSheetIndex());
        }
        return sheet;
    }

4.想到了个不错的写法
以前写类型:excel获取的字符串,通过if(xx.equals(yy)){set(静态变量)}..一二个还好,如果类型很多的话。。就要写很多if去判断
这次突然想到这个和键值对一样。。所以提前创建一个静态map

//此处有个错误,final修饰Map 时是Map的地址不变,而不是里面的内容不能修改,所以下面的Map在运行时,内容时可以被修改的
    //这样可能导致Map出现意料之外的值
//so,添加方法使map无法被修改
 private final static Map map = Collections.unmodifiableMap(new hashMap() {{
put (key,value);
put (key,value);
...
}})

然后可以干掉那些if(...){set..},直接写
set(map.get(sheet.getrow(i).getcell(j)))
潜在的好处(以后展示数据和数据库数据切换会比较方便)

你可能感兴趣的:(实现一个excel导入功能)