利用POI进行Excel的文件解析,maven依赖如下
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${apache.poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${apache.poi.ooxml.version}</version>
</dependency>
配置SpringMvc文件上传解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值为5MB-->
<property name="maxUploadSize" value="5242880"></property>
<!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
<property name="maxInMemorySize" value="40960"></property>
<!-- 延迟文件解析 -->
<property name="resolveLazily" value="true"/>
</bean>
写上传文件的Controller
public BaseResponse upload(MultipartFile file) throws Exception {
//检验忽略
...
//获取文件后缀名
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(Constant.DOT) + 1);
Workbook wb = null;
//对于2003的版本,用HSSFWorkbook处理
if (Constant.EXCEL_2003_SUFFIX.equals(suffix)) {
wb = new HSSFWorkbook(file.getInputStream());
//对于2007以及后续版本,用XSSFWorkbook进行处理
} else if (Constant.EXCEL_2007_SUFFIX.equals(suffix)) {
wb = new XSSFWorkbook(file.getInputStream());
} else {
return buildResponse(CommonCodeEnum.FILE_SUFFIX_NO_VALID, null);
}
List<Long> ids = Lists.newArrayList();
try {
//获取第一个sheet,可以利用循环获取每个sheet的内容
Sheet sheet = wb.getSheetAt(0);
//第一行是标题,跳过
for (int i = 1; i < sheet.getLastRowNum() + 1; i++) {
Row row = sheet.getRow(i);
if (row != null) {
//获取第一列的内容
Cell cell = row.getCell(0);
Long id = (long) cell.getNumericCellValue();//数字类型
id.add(poiId);
}
}
} catch (Exception e) {
return buildResponse(CommonCodeEnum.FILE_CONTENT_NO_VALID, null);
}
//后续处理忽略
...
}
可以利用postman进行测试