美文网首页
实现一个excel导入功能

实现一个excel导入功能

作者: 江江江123 | 来源:发表于2018-03-29 15:10 被阅读0次

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

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

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

    2.静态页面

    <form action="路径" method="post"
              enctype="multipart/form-data">
            <label for="file">文件名:</label>
            <input type="file" name="file" id="file" />
            <input type="submit" name="submit" value="提交" />
      </form>
    

    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<Object,String> map = Collections.unmodifiableMap(new hashMap() {{
    put (key,value);
    put (key,value);
    ...
    }})
    

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

    相关文章

      网友评论

          本文标题:实现一个excel导入功能

          本文链接:https://www.haomeiwen.com/subject/yqescftx.html