• Apache POI(Java)


    一、Apache POI介绍

    Apache POI是Apache组织提供的开源的工具包(jar包)。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 文本的导入和导出是它的主要特点

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

    二、软件操作对应Java操作转化

    软件:
    1、打开Office
    2、创建一个sheet(表格对象)

    平时打开会自动帮我们创建好一个sheet页

    3、通过点击某个位置来写入数据;

    Java:
    1 、创建Excel工作文件对象 HSSFWorkbook()
    2 、根据文件对象创建表格对象 createSheet( )
    在Java中,我们通过行列的方法来确定数据写入到哪个位置
    3 、根据表格对象创建表格的行对象 createRow()
    4 、根据行对象创建表格的单元格对象 creatCell()

    5、 往指定的位置插入数据 cell.setCellValue()
    6、 将数据以流的方式存储到文件中

    需要注意的是,通过office创建的时候,是直接存储到磁盘中的,通过Java程序创建时,是先存储到内存中,再通过输出流,写入到磁盘中;

    三、步骤

    maven坐标

    <dependency>
        <groupId>org.apache.poigroupId>
        <artifactId>poiartifactId>
        <version>3.16version>
    dependency>
    <dependency>
        <groupId>org.apache.poigroupId>
        <artifactId>poi-ooxmlartifactId>
        <version>3.16version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    代码

    数据写入excel

    package com.sky.test;
    
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    public class POITest {
    
        /**
         * 基于POI向Excel文件写入数据
         * @throws Exception
         */
        public static void write() throws Exception{
            //在内存中创建一个Excel文件对象
            XSSFWorkbook excel = new XSSFWorkbook();
            //创建Sheet页
            XSSFSheet sheet = excel.createSheet("itcast");
    
            //在Sheet页中创建行,0表示第1行
            XSSFRow row1 = sheet.createRow(0);
            //创建单元格并在单元格中设置值,单元格编号也是从0开始,1表示第2个单元格
            row1.createCell(1).setCellValue("姓名");
            row1.createCell(2).setCellValue("城市");
    
            XSSFRow row2 = sheet.createRow(1);
            row2.createCell(1).setCellValue("张三");
            row2.createCell(2).setCellValue("北京");
    
            XSSFRow row3 = sheet.createRow(2);
            row3.createCell(1).setCellValue("李四");
            row3.createCell(2).setCellValue("上海");
    
            FileOutputStream out = new FileOutputStream(new File("D:\\itcast.xlsx"));
            //通过输出流将内存中的Excel文件写入到磁盘上
            excel.write(out);
    
            //关闭资源
            out.flush();
            out.close();
            excel.close();
        }
        public static void main(String[] args) throws Exception {
            write();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    读取Excel文件中的数据

    package com.sky.test;
    
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    public class POITest {
        /**
         * 基于POI读取Excel文件
         * @throws Exception
         */
        public static void read() throws Exception{
            FileInputStream in = new FileInputStream(new File("D:\\itcast.xlsx"));
            //通过输入流读取指定的Excel文件
            XSSFWorkbook excel = new XSSFWorkbook(in);
            //获取Excel文件的第1个Sheet页
            XSSFSheet sheet = excel.getSheetAt(0);
    
            //获取Sheet页中的最后一行的行号
            int lastRowNum = sheet.getLastRowNum();
    
            for (int i = 0; i <= lastRowNum; i++) {
                //获取Sheet页中的行
                XSSFRow titleRow = sheet.getRow(i);
                //获取行的第2个单元格
                XSSFCell cell1 = titleRow.getCell(1);
                //获取单元格中的文本内容
                String cellValue1 = cell1.getStringCellValue();
                //获取行的第3个单元格
                XSSFCell cell2 = titleRow.getCell(2);
                //获取单元格中的文本内容
                String cellValue2 = cell2.getStringCellValue();
    
                System.out.println(cellValue1 + " " +cellValue2);
            }
    
            //关闭资源
            in.close();
            excel.close();
        }
    
        public static void main(String[] args) throws Exception {
            read();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    外卖项目应用

    基于excel模板写入数据并导出
    在这里插入图片描述

     /**导出近30天的运营数据报表
         * @param response
         **/
        public void exportBusinessData(HttpServletResponse response) {
            // 从今天 往前算30天,是begin;
            LocalDate begin = LocalDate.now().minusDays(30);
            // 昨天是 end;
            LocalDate end = LocalDate.now().minusDays(1);
            // 1 、查询概览运营数据,提供给Excel模板文件
            BusinessDataVO businessData = workspaceService.getBusinessData(
                    LocalDateTime.of(begin,LocalTime.MIN),
                    LocalDateTime.of(end, LocalTime.MAX)
            );
            // 通过 当前类的加载器 来获取模板文件的输入流对象
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
            try {
                //基于提供好的模板文件的输入流对象创建一个新的Excel表格对象
                XSSFWorkbook excel = new XSSFWorkbook(inputStream);
                //获得Excel文件中的一个Sheet页
                XSSFSheet sheet = excel.getSheet("Sheet1");
    
                sheet.getRow(1).getCell(1).setCellValue(begin + "至" + end);
                //获得第4行
                XSSFRow row = sheet.getRow(3);
                //获取单元格
                row.getCell(2).setCellValue(businessData.getTurnover());
                row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
                row.getCell(6).setCellValue(businessData.getNewUsers());
                row = sheet.getRow(4);
                row.getCell(2).setCellValue(businessData.getValidOrderCount());
                row.getCell(4).setCellValue(businessData.getUnitPrice());
                for (int i = 0; i < 30; i++) {
                    LocalDate date = begin.plusDays(i);
                    //准备明细数据
                    businessData = workspaceService.getBusinessData(LocalDateTime.of(date,LocalTime.MIN), LocalDateTime.of(date, LocalTime.MAX));
                    row = sheet.getRow(7 + i);
                    row.getCell(1).setCellValue(date.toString());
                    row.getCell(2).setCellValue(businessData.getTurnover());
                    row.getCell(3).setCellValue(businessData.getValidOrderCount());
                    row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
                    row.getCell(5).setCellValue(businessData.getUnitPrice());
                    row.getCell(6).setCellValue(businessData.getNewUsers());
                }
                //通过输出流将文件下载到客户端浏览器中
                ServletOutputStream out = response.getOutputStream();
                excel.write(out);
                //关闭资源
                out.flush();
                out.close();
                excel.close();
    
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    Windows服务器TLS协议
    【Django】开发日报_1_Day:创建项目
    Linux介绍与常用命令详解
    Vue3 el-tooltip 根据内容控制宽度大小换行和并且内容太短不显示
    免费嵌入 NFT 数据到任何网站或平台
    HDLbits: Lfsr5
    【村长的刷题手册-1】LeetCode刷题笔记,不断总结继续出发
    【爬虫逆向】Python逆向采集猫眼电影票房数据
    linux命令 记录
    java计算机毕业设计高校请假管理系统MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/m0_60708917/article/details/134509429