zoukankan      html  css  js  c++  java
  • 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;
    }
    }
    }

  • 相关阅读:
    非网管交换机和网管交换机的区别
    百兆工业交换机与千兆工业交换机如何计算码率?
    光纤收发器的测试内容介绍
    使用expect在script中切换到root用户(精华)
    彻底解决ssh.invoke_shell() 返回的中文问题
    Python3之paramiko模块
    linux expect详解
    Apache HTTP Server 虚拟主机配置
    Apache 配置详解
    apache 基本配置
  • 原文地址:https://www.cnblogs.com/Mr-Y1907/p/13919970.html
Copyright © 2011-2022 走看看