有关使用Excel读取用户上传模板问题

简介: 有关使用Excel读取用户上传模板问题

有关使用Excel读取用户上传模板问题

需求是这样的:

用户根据模板填写对应的信息,后端代码对模板进行解析,然后使用Map进行存储,返回map集合。

解决方案:

if(null==multipartFile || multipartFile.getSize()<=0){
            result.setMsg("文件不可为空,请重新上传");
            result.setCode(BaseResponseEnum.ParamError.getState());
            result.setSuccess(false);
            result.setT(null);
            return result;
        }
        String filename = multipartFile.getOriginalFilename();
        if(!(filename.endsWith(".xls")|| filename.endsWith(".xlsx"))){
            result.setMsg("文件上传的格式不正确,请重新上传");
            result.setCode(BaseResponseEnum.ParamError.getState());
            result.setSuccess(false);
            result.setT(null);
            return result;
        }
        Map<String,List<ExcelPo>> resultMap=new HashMap<>();
        try{
            if(filename.endsWith(".xls")){
                resultMap=readXLS(multipartFile);
            }else{
                resultMap=readXLSX(multipartFile);
            }
            result.setT(resultMap);
            return result;
        }catch (Exception e){
            result.setMsg("内容读取失败,请重试尝试上传!");
            return result;
        }
    }
        //excel后缀为XLSX格式的方法
    private Map<String,List<ExcelPo>> readXLSX(MultipartFile multipartFile) throws IOException {
        ArrayList<ExcelPo> list = new ArrayList<>();
        Map<String,List<ExcelPo>> map= new HashMap<>();
        InputStream inputStream = multipartFile.getInputStream();
        XSSFWorkbook Workbook = new XSSFWorkbook(inputStream);
        XSSFSheet sheet = Workbook.getSheetAt(0);
        int lastRowNum = sheet.getLastRowNum();
        for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) {
            XSSFRow row = sheet.getRow(rowNum);
            if (row != null) {
               ExcelPo excelPo = new ExcelPo();
               //把对应不是为String的列 设置单元列为字符
                row.getCell(2).setCellType(CellType.STRING);
                row.getCell(0).setCellType(CellType.STRING);
               excelPo.setOrder(Integer.parseInt(row.getCell(0).getStringCellValue()));
                excelPo.setHotelId(Long.parseLong(row.getCell(2).getStringCellValue()));
                //判断map中的Key是否已经包含对应的Id,包含的话 则把对应的ExcelPO信息添加作为value
               if( map.containsKey(row.getCell(1).getStringCellValue())){
                   map.get(row.getCell(1).getStringCellValue()).add(hotelExcelPo);
               }else {
                   //否则 创建新的集合,作为value 添加到map
                   List<ExcelPo> list1 = new ArrayList<>();
                   list1.add(excelPo);
                   map.put(row.getCell(1).getStringCellValue(),list1);
               }
            }
        }
        return map;
    }
    //excel后缀为XLS格式的方法
    private Map<String,List<ExcelPo>> readXLS(MultipartFile multipartFile) throws IOException {
        ArrayList<ExcelPo> list = new ArrayList<>();
        Map<String,List<HotelExcelPo>> map=new HashMap<>();
        InputStream inputStream = multipartFile.getInputStream();
        HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
        HSSFSheet sheet = workbook.getSheetAt(0);
        //遍历每一行Excel获取内容
        for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
            HSSFRow row = sheet.getRow(rowNum);
            if (row!=null){
                ExcelPo excelPo = new ExcelPo();
                row.getCell(0).setCellType(CellType.STRING);
                row.getCell(2).setCellType(CellType.STRING);
             excelPo.setOrder(Integer.parseInt(row.getCell(0).getStringCellValue()));
               excelPo.setHotelId(Long.parseLong(row.getCell(2).getStringCellValue()));
                if( map.containsKey(row.getCell(1).getStringCellValue())){
                    map.get(row.getCell(1).getStringCellValue()).add(excelPo);
                }else {
                    List< ExcelPo> list1 = new ArrayList<>();
                    list1.add(hotelExcelPo);
                    map.put(row.getCell(1).getStringCellValue(),list1);
                }
            }
        }
        return map;
    }
相关文章
|
6月前
|
前端开发 Java
SpringBoot下载xlsx模板,导出excel数据
SpringBoot下载xlsx模板,导出excel数据
465 0
|
JSON Java 应用服务中间件
利用esaypoi自定义Excel表格模板导入与导出表单数据
今天工作中又遇到了excel导出数据的功能,在这里我将自己自定义的Excel模板和相关的代码拿出来,解释一下如何进行操作,以便日后能够方便的进行功能开发,提高效率。
713 0
|
前端开发 Java API
Java原样导出excel模板
Java原样导出excel模板
139 0
|
6月前
|
Java
Java 读取 Excel 模板,将数据填入Excel表格,后转换为PDF文件(实用)
Java 读取 Excel 模板,将数据填入Excel表格,后转换为PDF文件(实用)
442 0
|
6月前
|
算法
通过EXCEL模板题库进行随机组卷的一些设计思路
通过EXCEL模板题库进行随机组卷的一些设计思路
C#写入模板excel数据
C#写入模板excel数据
76 0
|
缓存 安全 easyexcel
阿里开源的这个库,让Excel导出不再复杂(填充模板的使用指南)
前文 说了写操作,可以实现简单的列表导出,还能 定义样式。有时候,我们还需要导出的一个大表单,或者是表单+列表的形式,这个时候,我们就需要填充功能。
1684 0
阿里开源的这个库,让Excel导出不再复杂(填充模板的使用指南)
|
数据可视化 开发工具 git
只会Excel想做图表可视化,让数据动起来?可以,快来围观啦(附大量模板下载)
只会Excel想做图表可视化,让数据动起来?可以,快来围观啦(附大量模板下载)
|
SQL HIVE
附模板和代码 | Excel数据模型自动生成Hive建表语句
在日常数据开发过程中,会经常需要根据数据模型编写建表语句,每次写建表语句都会用几分钟的时间,而且还容易出一些低级的错误,于是打算做个 Excel 模板,把表字段、表分区、表名写在里面,通过程序自动生成建表语句
|
easyexcel
根据指定Excel模板填充导出数据
根据Excel模板填充优先推荐阿里的EasyExcel,github地址:https://github.com/alibaba/easyexcel。