文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java读取excel指定行列的数据(poi的方式)

2023-10-26 11:01

关注

文章目录

一、前言

JAVA中的POI是一个由Apache提供的jar包,用于支持处理Excel、Word、PPT等文件。它是一套用Java编写的免费开源的跨平台的 Java API;用于给Java程序,访问微软格式文档Microsoft Office,读和写的功能的Java API。

二、业务需求背景

项目需要读取excel中部分行列的内容(可以延申为读取一个excel中的内容,并且这个excel中的行数和列数是动态变化的)。然后把读到的内容转化为Json格式的数据。
在这里插入图片描述
这是excel文件内容,要将这个文件中的内容读出并转化 为json格式的数据:(这里只是列举部分数据,Json格式已经体现了)

'p10':'3': 0.75'4': 0.428'6': 0.289'8': 0.22'10': 0.191'12': 0.158'14': 0.14'16': 0.125'18': 0.121'20': 0.113'p20':'3': 0.652'4': 0.412'6': 0.267'8': 0.179'10': 0.141'12': 0.138'14': 0.116'16': 0.109'18': 0.12'20': 0.122

三、解决思路

  1. 把每个单元格当作一个对象,这个对象中包含横坐标,纵坐标,单元格中的数据值。
  2. 找出表头行(也就是第二行,因为第一行中的数据用不到,所以不需要读取,笔者的需求是这样的)。
  3. 找出表头列(也就是第一列)。
  4. 按照要求的格式拼接数据(要求的格式比如说是json或者其他格式进行拼接)。

四、实现方案

1.引入pom

<dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi-ooxml</artifactId>            <version>4.1.2</version>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi-ooxml-schemas</artifactId>            <version>4.1.2</version>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>4.1.2</version>        </dependency>

2.按照解决思路2、3、4进行代码的编写

  //获取文件路径        String filePath = "D:\\TI.xls";        File file = new File(filePath);        //获取文件后缀        String finishFile = filePath.substring(turbulenceCurveFile.lastIndexOf(".") + 1);        InputStream inputStream = new FileInputStream(file);        //这里需要注意XSSFWorkbook能够处理xlsx的文件        //而HSSFWorkbook能够处理xls的文件,不然会报错,这样写是为了更好的兼容处理两种格式        Workbook workbook;        if ("xlsx".equals(finishFile)) {            workbook = new XSSFWorkbook(inputStream);        } else {            workbook = new HSSFWorkbook(inputStream);        }        //这里是读取第几个sheet        Sheet sheet = workbook.getSheetAt(0);        //这里是读取总行数        int rows = sheet.getPhysicalNumberOfRows();        List<CoordinateVO> allList = new ArrayList<>();        //1.找到所有的元素对象,然后用list存放        for (int i = 1; i < rows; i++) {            Row row = sheet.getRow(i);//获取每一行            int columns = 0;            if (1 == i) {                //获取每一行的最后一列的列号,即总列数,这里需要注意一下,                //这种方法读取第一行的列数的时候会多读取一列,所以这里要减1                columns = row.getLastCellNum() - 1;            } else {                columns = row.getLastCellNum();            }            for (int j = 0; j < columns; j++) {                //获取每个单元格                Cell cell = row.getCell(j);                //设置单元格类型                cell.setCellType(CellType.STRING);                //获取单元格数据                String cellValue = cell.getStringCellValue();                CoordinateVO coordinateVO = new CoordinateVO();                coordinateVO.setCoordinateX(i);                coordinateVO.setCoordinateY(j);                coordinateVO.setDataValue(cellValue);                allList.add(coordinateVO);            }        }        //至此,所有的数据都已经获取完了,并且都存放在allList这个集合当中去了        //接下来就是自己去拼接数据格式了,相信各位大佬这里应该没有问题,以下代码就不贴了

3.补充贴一下代码中的实体类

@Data@AllArgsConstructor@NoArgsConstructorpublic class CoordinateVO {        private Integer coordinateX;        private Integer coordinateY;        private String dataValue;}

4.代码中关键点的说明

操作Excel包括对象Workbook(工作簿),Sheet(工作表) ,Cell(单元格)。一个Excel就对应一Workbook对象,一个Workbook可以有多个Sheet对象,一个Sheet对象可以有多个Cell对象。

说明:本文是通过poi的方式对excel进行操作,如果想通过jxl的方式对excel进行操作的话,可以点击链接:java使用jxl读取execl中的数据

备注:本文为作者原创作品,有什么不正确的地方希望各位大神能指出不当之处,笔者当虚心受教。不喜勿喷。(转载请说明出处)谢谢!

来源地址:https://blog.csdn.net/qq_41774102/article/details/127445159

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯