MultipartFile解析Excel
被要求解析上传的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;
	    }
	  }
	}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号