被要求解析上传的excel实现批量修改,网上找个工具类 根据自己的要求 改了改
前端部分
var formData = new FormData();
formData.append("files", overallSituation.files[0]);
$.ajax({
url: "fms/******/upload*******File",
data: formData,
type: "POST",
// dataType: "json",
cache: false, //上传文件无需缓存
processData: false, //用于对data参数进行序列化处理 这里必须false
contentType: false, //必须
success: function (data) {
if(data=="null"){
Message.info("文件有误!");
}else if(data=="false"){
Message.info("出现异常!");
}else{
Message.info("成功修改数据"+data+"条!");
panelVm.close();
}
}
});
// controller 具体的 就不写了
@RequestMapping(value="/*****",method = RequestMethod.POST)
@ResponseBody
public String *****(@RequestParam("files") MultipartFile files) throws IOException{
return setFile(files);
}
// 工具类 把MultipartFile 这个对象解析成 List
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.ArrayList;
/**
*
* @author *****
* @Date 2020-11-03 10:30
*/
public class ExcleAnalysisUtil {
public ExcleAnalysisUtil() {
throw new Error("工具类不允许实例化!");
}
/**
* 获取并解析excel文件,返回一个二维集合
* @param file 上传的文件
* @return 二维集合(第一重集合为行,第二重集合为列,每一行包含该行的列集合,列集合包含该行的全部单元格的值)
*/
public static ArrayList<ArrayList<String>> analysis(MultipartFile file) {
ArrayList<ArrayList<String>> row = new ArrayList<>();
//获取文件名称
String fileName = file.getOriginalFilename();
System.out.println(fileName);
try {
//获取输入流
InputStream in = file.getInputStream();
//判断excel版本
Workbook workbook = null;
if (judegExcelEdition(fileName)) {
workbook = new XSSFWorkbook(in);
} else {
workbook = new HSSFWorkbook(in);
}
//获取第一张工作表
Sheet sheet = workbook.getSheetAt(0);
//从第二行开始获取 getLastRowNum
System.out.println(sheet.getLastRowNum());
System.out.println(sheet.getPhysicalNumberOfRows());
for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
//循环获取工作表的每一行
Row sheetRow = sheet.getRow(i);
//循环获取每一列
ArrayList<String> cell = new ArrayList<>();
for (int j = 0; j < sheetRow.getPhysicalNumberOfCells(); j++) { //
//将每一个单元格的值装入列集合
sheetRow.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
cell.add(sheetRow.getCell(j).getStringCellValue());
}
//将装有每一列的集合装入大集合
row.add(cell);
//关闭资源
workbook.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("===================未找到文件======================");
} catch (IOException e) {
e.printStackTrace();
System.out.println("===================上传失败======================");
}
return row;
}
/**
* 判断上传的excel文件版本(xls为2003,xlsx为2017)
* @param fileName 文件路径
* @return excel2007及以上版本返回true,excel2007以下版本返回false
*/
private static boolean judegExcelEdition(String fileName){
if (fileName.matches("^.+\.(?i)(xls)$")){
return false;
}else {
return true;
}
}
}