可用的地方例如,相同字段的校验。excles 中的表头内容与 想要的内容的比较,如果返回值为true的话则相同,可以进行后续操作
String[] sourceArray = {"目标1","目标2"};
String[] targetArray = {"目标1","目标2"};
boolean equals = Arrays.equals(sourceArray, targetArray);
System.out.println(equals);
@PostMapping("batchImport")
public void batchSellLimitImport(SellerLimit sellerLimit,
HttpServletRequest request, final HttpServletResponse response){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile multipartFile = multipartRequest.getFile("file");
String[] titleName = {"*列表1","列表2"};
InputStream inputStream = multipartFile.getInputStream();
if(null != inputStream){
Workbook sheets = WorkbookFactory.create(inputStream);
Sheet sheetAt = sheets.getSheetAt(0);
//获取Excel最后一行索引,从零开始,所以获取到的是表中最后一行行数减一
int lastRowNum = sheetAt.getLastRowNum();
//获取Excel列数
short lastCellNum = sheetAt.getRow(1).getLastCellNum();
//校验标题是否与预定相匹配
if( ! this.checkTitleRow(titleName,sheetAt.getRow(1),lastCellNum)){
throw new BusinessRuntimeException("导入文件与模板文件不匹配");
}
//去掉第一行的标题行
List<SellerLimit> sellerLimits = new ArrayList<>();
for (int i = 2; i < lastRowNum - 1; i++) {
Row row = sheetAt.getRow(i);
this.getRowValue(lastCellNum, sellerLimits, row,i);
}
}
}
/**
* 校验第一行是否与预定相匹配
* @param titleName 预定的标题名
* @param row 需要的校验的是哪一行
* @param lastCellNum 列数
*/
private boolean checkTitleRow(String[] titleName, Row row, short lastCellNum) {
String[] actualTitle = new String[lastCellNum];
for (int j = 0; j < lastCellNum; j++) {
Cell cell = row.getCell(j);
actualTitle[j] = cell.getStringCellValue();
}
boolean equals = Arrays.equals(titleName, actualTitle);
return equals;
}