SpringMVC上传Excel文件

2018-01-25  本文已影响0人  lxqfirst

利用POI进行Excel的文件解析,maven依赖如下

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>${apache.poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${apache.poi.ooxml.version}</version>
</dependency>

配置SpringMvc文件上传解析器

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设定默认编码 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 设定文件上传的最大值为5MB-->
        <property name="maxUploadSize" value="5242880"></property>
        <!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
        <property name="maxInMemorySize" value="40960"></property>
        <!-- 延迟文件解析 -->
        <property name="resolveLazily" value="true"/>
    </bean>

写上传文件的Controller

public BaseResponse upload(MultipartFile file) throws Exception {
        //检验忽略
         ...

        //获取文件后缀名
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(Constant.DOT) + 1);
        Workbook wb = null;
        //对于2003的版本,用HSSFWorkbook处理
        if (Constant.EXCEL_2003_SUFFIX.equals(suffix)) {
            wb = new HSSFWorkbook(file.getInputStream());
        //对于2007以及后续版本,用XSSFWorkbook进行处理
        } else if (Constant.EXCEL_2007_SUFFIX.equals(suffix)) {
            wb = new XSSFWorkbook(file.getInputStream());
        } else {
            return buildResponse(CommonCodeEnum.FILE_SUFFIX_NO_VALID, null);
        }

        List<Long> ids = Lists.newArrayList();
        try {
            //获取第一个sheet,可以利用循环获取每个sheet的内容
            Sheet sheet = wb.getSheetAt(0); 

            //第一行是标题,跳过
            for (int i = 1; i < sheet.getLastRowNum() + 1; i++) {
                Row row = sheet.getRow(i);
                if (row != null) {
                    //获取第一列的内容
                    Cell cell = row.getCell(0);
                    Long id = (long) cell.getNumericCellValue();//数字类型
                    id.add(poiId);
                }
            }
        } catch (Exception e) {
            return buildResponse(CommonCodeEnum.FILE_CONTENT_NO_VALID, null);
        }

        //后续处理忽略
        ...
    }

可以利用postman进行测试

image.png
上一篇下一篇

猜你喜欢

热点阅读