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)))
潜在的好处(以后展示数据和数据库数据切换会比较方便)
网友评论