ApachePOI操作Excel快速入门使用

news/2024/7/21 6:07:45 标签: excel, powerpoint, microsoft

简介

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,主要任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式, 该API的组件列表如下:

  • POIFS - 该组件是所有其他POI元素的基本因素。 它用于显式读取不同的文件。
  • HSSF - 用于读取和写入MS-Excel文件的xls格式。
  • XSSF - 用于MS-Excel的xlsx文件格式。 常用,
  • SXSSF - 用于比较大的xlsx文件格式。
  • HWPF - 用于读写MS-Word的doc扩展文件。
  • XWPF - 用于读写MS-Word的docx扩展文件。
  • HSLF - 用于阅读,创建和编辑PowerPoint演示文稿。
  • HDGF - 它包含MS-Visio二进制文件的类和方法。
  • HPBF - 用于读写MS-Publisher文件。

excel有两个常用后缀 ,一个是较老的版本 后缀是 xls ,一个是xlsx 2007及以后版本生成的文件格式 xls和xlsx的区别

简单来说就是,我们可以使用 POI 在 Java 中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。
在这里插入图片描述


快速入门:

Apache POI既可以将数据写入Excel文件,也可以读取Excel文件中的数据,接下来分别进行实现。

导入依赖:

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

1 将数据写入Excel表

使用的大致思路其实也和我们手动创建Excel一样

创建一个Excel文件 ======>> 创建一个Sheet页 ======>> 创建行 ======>> 创建行中的每一列

注意都是从0开始

    @Test
    public void testExcel() throws Exception {
//       创建一个Excel文件
        XSSFWorkbook sheets = new XSSFWorkbook();
//       创建一个Sheet页
        XSSFSheet sheet = sheets.createSheet("用户信息");
//       通过Sheet一行, 创建行   
        XSSFRow row1 = sheet.createRow(0);
//       创建行中的每一列
        row1.createCell(1).setCellValue("姓名");
        row1.createCell(2).setCellValue("城市");
//       创建第二行
        XSSFRow row2 = sheet.createRow(1);
        row2.createCell(1).setCellValue("张三");
        row2.createCell(2).setCellValue(23);

        XSSFRow row3 = sheet.createRow(2);
        row3.createCell(1).setCellValue("王五");
        row3.createCell(2).setCellValue(25);

        FileOutputStream outputStream = new FileOutputStream("E:\\MyProject\\testPOI.xlsx");

        sheets.write(outputStream);

//        关闭资源
        outputStream.close();
        sheets.close();
    }

此时就会在 E:\\MyProject\\ 生成一个 testPOI.xlsx 如下:

在这里插入图片描述

2 读取Excel表数据

下面就来读取刚才创建的文件
思路:
获取IO输入流 ======>> 得到当前文件对象 ======>> 获取Sheet对象 ======>> 得到行对象 ======>> 获取行中的单元格

    @Test
    public void testExcelRead() throws Exception {
//        获取IO输入流
        FileInputStream inputStream = new FileInputStream("E:\\MyProject\\testPOI.xlsx");
        // 通过构造器获取当前文件
        XSSFWorkbook xlsx = new XSSFWorkbook(inputStream);
//        通过名称获取指定的sheet页
        XSSFSheet userMessage = xlsx.getSheet("用户信息");
//        获取第一行
        XSSFRow row = userMessage.getRow(0);
//        获取第一行中的第二列,第三个的数据(第二个单元格和第三个单元格)
        XSSFCell oneTwo = row.getCell(1);   // 姓名
        XSSFCell oneThree = row.getCell(2); // 城市
        System.out.println(oneTwo + "  ---  " + oneThree);
//      获取第二行第三行的数据,  这里就模拟假如有多行的情况下
//       获取最后一行的行号
        int lastRowNum = userMessage.getLastRowNum();
        for (int i = 1; i <= lastRowNum; i++) {
            XSSFRow nowRow = userMessage.getRow(i);
            XSSFCell oneTwoMessage = nowRow.getCell(1);   // 姓名
            XSSFCell oneThreeMessage = nowRow.getCell(2); // 城市
            System.out.println(oneTwoMessage + "  ---  " + oneThreeMessage);
        }
//        关闭资源
        inputStream.close();
        xlsx.close();
    }

在这里插入图片描述

这里只是简单对POI中对Excel 中xlsx文件做了一个介绍, 其他的基本都大同小异没有太大的难度,对着APi 或文档即可直接使用,如果大家想看操作其他文件的实现, 可以参考下面官方文档和大佬的博客

官方文档(英文):

Overview (POI API Documentation) (51helpdoc.com)

推荐博客:
POI使用详解 - 空谷幽澜 - 博客园 (cnblogs.com)

POI中文API文档_poi中文api官方文档_weihubeats的博客-CSDN博客


http://www.niftyadmin.cn/n/274923.html

相关文章

智能网联汽车城市化的进程和思考

4月19日&#xff0c;工信部官网显示&#xff0c;支持湖北&#xff08;襄阳&#xff09;、浙江&#xff08;德清&#xff09;、广西&#xff08;柳州&#xff09;创建国家级车联网先导区。至此&#xff0c;车联网国家级先导区正式扩容&#xff0c;由4个增至7个。智能网联作为新生…

轻松掌握mysql慢查询定位与优化知识点

在这里插入图片描述 1、利用工具定位慢sql 1、运维工具Skywalking 1、定位到慢接口 2、追踪慢sql的执行情况 2、利用MySQL的日志定位慢sql 在调式阶段才开启慢日志的查询&#xff0c;因为会损耗一些性能。 3、分析是否正确使用了索引 当我们已经定位到具体哪个sql较慢时&…

傅里叶变换解析

p.s.本文无论是cos还是sin&#xff0c;都统一用“正弦波”(Sine Wave)一词来代表简谐波。 一、什么是频域 从我们出生&#xff0c;我们看到的世界都以时间贯穿&#xff0c;股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称…

YOLOv8——CV界的XGBoost

yolov8是ultralytics公司于2023年1月开源的anchor-free的最新目标检测算法框架。 封装在ultralytics这个库中&#xff1a;https://github.com/ultralytics/ultralytics 它具有以下优点&#xff1a; 1&#xff0c;性能速度领先&#xff1a;借鉴了之前许多YOLO版本的trick&#x…

07.computed

学习要点&#xff1a; 1.computed 本节课我们来要了解一下 Vue3.x 中的计算属性 computed 用法&#xff1b; 一&#xff0e;computed 1. computed 是组合式 API 中的计算属性的功能&#xff0c;和传统式基本一致&#xff1b; const count ref(1) //const myCount computed(()…

Selenium实战教程系列(三)--- Selenium中的动作

Selenium中针对元素进行的动作在代码中可以分为两类&#xff1a; Selenium::WebDriver::ActionBuilder类中的动作方法Selenium::WebDriver::Element类中的动作方法 其中ActionBuilder类中的动作方法比较丰富&#xff0c;基本涵盖了所有可以进行的操作。 而Element类的动作比较…

【软件相关】Proteus仿真STM32记录

文章目录 0 前期教程1 前言2 先说说建议的流程3 需要注意的事项3.1 供电网配置不要忘了3.2 ADC模块的使用3.3 元器件查询手册 4 一些小技巧 0 前期教程 【软件相关】Proteus 8入门教程 1 前言 最近接了一个项目&#xff0c;是基于Proteus仿真STM32的&#xff0c;虽然此前有听…

( 栈和队列) 155. 最小栈 ——【Leetcode每日一题】

❓155. 最小栈 难度&#xff1a;中等 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。…