前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot中Excel的解析操作(一)

Springboot中Excel的解析操作(一)

作者头像
23号杂货铺
发布2019-09-27 16:31:48
2.6K1
发布2019-09-27 16:31:48
举报
文章被收录于专栏:23号杂货铺23号杂货铺

机遇与挑战并存,努力的人会更加幸运。相信。 —— 23号老板

原创:凌空夜望,CSDN

最近在做SpringBoot项目,项目中需要上传Excel文件,对Excel文件中的内容进行解析,然后将需要的数据存入数据库,同时还要根据用户的需求,将需要的内容生成Excel文件,并下载下来。本篇主要是介绍Excel文件的上传,然后对文件进行解析处理的过程。使用的开发工具是IDEA 。

内容概要:

  • 项目maven依赖
  • Controller层代码
  • 工具类HandleFile代码
  • 静态页面和测试文件
  • 测试的结果

一、项目maven依赖

需要注意的是:这里选择的poi-ooxml和poi的依赖版本最好一致,否则可能会有两个依赖会出现不匹配的问题。本人曾遇到过poi-ooxml的版本是3.9,poi的版本是3.13,最终在测试阶段报错:

java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log(ILjava/lang/Object;)V from class org.apache.poi.openxml4j.opc.PackageRelationshipCollection

代码语言:javascript
复制
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.9</version>
    </dependency>

二、Controller层

代码语言:javascript
复制
 /**
 * 上传Excel文件
 * @param request
 * @return
 * @throws Exception
 */
@PostMapping(value = "excel/upload")
@ResponseBody
public String uploadExcel(HttpServletRequest request) throws Exception {
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

    MultipartFile file = multipartRequest.getFile("filename");
    if (file.isEmpty()) {
        return "文件不能为空";
    }
    InputStream inputStream = file.getInputStream();
    List<List<Object>> list = HandleFile.parseExcel(inputStream,file.getOriginalFilename());
    inputStream.close();

    for (int i = 0; i < list.size(); i++) {
        List<Object> lo = list.get(i);
        //TODO 随意发挥
        //可以将数据遍历出来后,存储到数据库中
        System.out.println(lo);

    }
    return "上传成功";
}

三、HandleFile工具类

代码语言:javascript
复制
/**
 * 解析Excel文件
 *
 * @param in
 * @param fileName
 */
public static List<List<Object>> parseExcel(InputStream in, String fileName) throws Exception {
    List list = null;
    Workbook work = null;
    list = new ArrayList<>();
    //创建Excel工作薄
    work = getWorkbook(in, fileName);
    if (null == work) {
        throw new Exception("创建Excel工作薄为空!");
    }
    Sheet sheet = null;
    Row row = null;
    Cell cell = null;

    for (int i = 0; i < work.getNumberOfSheets(); i++) {
        sheet = work.getSheetAt(i);
        if (sheet == null) {
            continue;
        }

        for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
            row = sheet.getRow(j);
            if (row == null || row.getFirstCellNum() == j) {
                continue;
            }

            List<Object> li = new ArrayList<>();
            for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                cell = row.getCell(y);
                li.add(cell);
            }
            list.add(li);
        }
    }
    return list;

}

四、测试:增加静态页面和测试文件

目录结构:

静态页面:index.html

测试文件:test.xlsx

注意:访问静态页面的前端端口是在下图定义的,和访问项目的端口不是同一个

具体的访问路径是:http://localhost:8081/自己的项目名/templates/index.html

五、最终测试的结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 23号杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档