首页 > 其他分享 >Apache POI入门学习

Apache POI入门学习

时间:2024-07-16 09:56:51浏览次数:8  
标签:sheet 入门 POI excel getCell Apache setCellValue row

目录

说明介绍与使用场景:

说明

Apache POI 可用于处理Miscrosoft Office各种文件格式。可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。

使用场景:

一般情况下,POI 都是用于操作 Excel 文件,生成流水数据,统计报表等

使用:

一:导入maven坐标:

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

二:POI写入文件基本使用:

基本使用语句代码中有介绍

package com.sky.test;

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.FileOutputStream;

public class POITesk {

    /**
     * 创建Excel文件,并且写入
     */
    public static void write() throws Exception{
        //创建
        XSSFWorkbook excel=new XSSFWorkbook();
        //创建Sheet页
        XSSFSheet sheet=excel.createSheet("info");
        //创建行对象,编号是从0开始
        XSSFRow row=sheet.createRow(1);

        //创建单元格,并写入内容
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("城市");

        row= sheet.createRow(2);
        row.createCell(1).setCellValue("张三");
        row.createCell(2).setCellValue("北京");


        row= sheet.createRow(3);
        row.createCell(1).setCellValue("李四");
        row.createCell(2).setCellValue("南京");

        //通过输出流将内存中Excel文件写入到磁盘中
        FileOutputStream out=new FileOutputStream(new File("D:\\File"));
        excel.write(out);

        out.close();
        excel.close();


    }

    public static void main(String[] args)throws Exception {
        write();
    }
}

创建结果:
POI创建文件是在内存中创建,还需要通过输入流将内存中创建的文件保存到磁盘中
image.png

POI读取文件基本使用:

要先指定要读取的文件路径创建输出流读取到文件

/**
 * 通过POI读取文件
 * @throws IOException
 */
public static void read() throws IOException {
    InputStream in = new FileInputStream(new File("D:\\File"));

    //读取文件
    XSSFWorkbook excel = new XSSFWorkbook(in);

    //读取文件的第一个Sheet页
    XSSFSheet sheet= excel.getSheetAt(0);

    //获取最后一行的行号
    int lastRowNum=sheet.getLastRowNum();

    for (int i = 1; i < lastRowNum; i++) {
        //获得某一行
        XSSFRow row=sheet.getRow(i);
        //获取到单元格对象
        String cellValue1=row.getCell(1).getStringCellValue();
        String cellValue2=row.getCell(2).getStringCellValue();
        System.out.println(cellValue1+"  "+cellValue2);
    }
    in.close();
    excel.close();

}

实际使用:

苍穹外卖项目中用于统计导出近期的运营数据
添加好模板文件
image.png

代码开发

/**
 * 导出运营数据报表
 * @param response
 */
@Override
public void exportBusinessData(HttpServletResponse response) {
    //查询数据库,获取最近三十天的运营数据
    LocalDate dateBegin=LocalDate.now().minusDays(30);
    LocalDate dateEnd=LocalDate.now().minusDays(1);

    //查询概览数据
    BusinessDataVO businessDataVO=workspaceService
            .getBusinessData(LocalDateTime.of(dateBegin,LocalTime.MIN),LocalDateTime.of(dateEnd,LocalTime.MAX));

    //通过POI将数据写入到文件中
    InputStream in=this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");

    try {
        //基于模板创建一个新的excel文件
        XSSFWorkbook excel=new XSSFWorkbook(in);

        XSSFSheet sheet=excel.getSheet("Sheet1");
        sheet.getRow(1).getCell(1).setCellValue("时间:"+dateBegin+"至"+dateEnd);

        //填充数据
        //获取第四行
        XSSFRow row=sheet.getRow(3);
        row.getCell(2).setCellValue(businessDataVO.getTurnover());
        row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
        row.getCell(6).setCellValue(businessDataVO.getNewUsers());

        //第五行
        row=sheet.getRow(4);
        row.getCell(2).setCellValue(businessDataVO.getValidOrderCount());
        row.getCell(4).setCellValue(businessDataVO.getUnitPrice());

        for (int i = 0; i < 30; i++) {
            LocalDate date = dateBegin.plusDays(i);
            //准备明细数据
            BusinessDataVO 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());
        }

        //通过输出流将excel文件下载到客户端浏览器
        ServletOutputStream out=response.getOutputStream();
        excel.write(out);


    } catch (IOException e) {
        throw new RuntimeException(e);
    }



}

导出效果:

image.png
image.png

标签:sheet,入门,POI,excel,getCell,Apache,setCellValue,row
From: https://blog.csdn.net/m0_74963840/article/details/140451671

相关文章

  • php函数入门学习(数组常见函数2 & 文件基础读写)
    //1、写一个函数,传入数组,返回数组中元素为数字且大于10的新结果数组functiongetNumArr($arr){  if(!$arr)return'请传入数组';  $arr2=array_filter($arr,function($v){    //echogettype($v)."<br>";    returngettype($v)==='inte......
  • 电力需求预测挑战赛——Datawhale AI 夏令营第2期【从零入门AI竞赛之机器学习】
    赛事官网https://challenge.xfyun.cn/h5/detail?type=electricity-demand&ch=dw24_uGS8Gs学习者手册https://exn8g66dnwu.feishu.cn/docx/T7WGd7goqowRvFxwoApclo9Pn0bTask1——传统时序模型(2024/7/14)阶段要求根据文档跑通提交并拿下第一个分数;学习相关知识点,理解赛题。......
  • C# WinForm框架入门与基本控件使用详解
    一.Winform入门​WinForm是WindowsForm的简称,是基于.NETFramework平台的客户端(PC软件)开发技术,一般使用C#编程。在VS2019中,C#WinForm编程需要创建「Windows窗体应用程序」项目。Windows窗体应用程序是C#语言中的一个重要应用,也是C#语言最常见的应用。使用......
  • 入门PHP就来我这(高级)31~ 单文件上传
    有胆量你就来跟着路老师卷起来! --纯干货,技术知识分享路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。上篇文章简单的了解了介绍文件的写操作及目录的操作,本文开始着手实现文件的上传功能及单文件上传案例实现。 1文件上传文件上传可以通......
  • AI作画入门指南:从基础到高级的全面教程
    AI作画入门指南:从基础到高级的全面教程AI作画是一项融合了技术与艺术的创新领域。本指南将带你从基础到高级,逐步掌握AI作画的技巧,打造出独具个性的艺术作品。1.什么是AI作画?定义:AI作画是利用人工智能技术生成艺术作品的过程。常用的工具包括Midjourney、DALL-E和Stable......
  • 转型Web3开发第二课:Dapp开发入门基础 | 01 | 安装MetaMask
    前言完成了《转型Web3开发第一课》之后,得到了不少读者的认可,很多都在问什么时候开始下一课,近期终于抽出了时间开始搞起这第二课。这第二课的主题为「Dapp开发入门基础」,即想要转型做Dapp开发的人员,不管是做前端开发、后端开发、智能合约开发,都需要掌握的基础知识。这......
  • 快速入门:自动驾驶感知工程师的规划与决策核心技巧
    亚马逊云AWS大模型训练自动驾驶技术欢迎来到雲闪世界,亚马逊AWS雲服务器。经典的模块化自动驾驶系统通常由感知、预测、规划和控制组成。直到2023年左右,AI(人工智能)或ML(机器学习)主要在大多数量产自动驾驶系统中增强感知,其影响力在下游组件中逐渐减弱。与规划堆栈中AI的......
  • 【数据库】Redis入门
    Redis官网【Redis-TheReal-timeDataPlatform】在Linux上使用,不推荐使用Windows版本。键-值存储,非关系型数据库,存储在内存(关系型数据库存储在硬盘介质)开启redis服务:./redis-server开启redis客户端:./redis-cli-p6379关机命令:shutdown关闭客户端:quit/exit默认......
  • LangChain 快速入门:构建你的第一个智能应用
    引言随着大型语言模型(LLM)的崛起,开发人员现在可以利用这些强大的工具来创建一系列创新的应用程序,从自动文档摘要到聊天机器人,再到智能客服系统。LangChain是一个开源框架,旨在简化与LLM的交互,帮助开发者轻松地构建和部署基于LLM的应用程序。本文将带你快速入门LangChain,通......
  • 【CTF入门】BUUCTF N1BOOK闯关(持续更新)
    【CTF入门】BUUCTFN1BOOK闯关(持续更新)[第一章web入门]常见的搜集点击启动靶机,为我们生成了一个链接,这就是我们要攻击的地址。点击链接进入,发现这个页面:可以看出这道题目的考点是信息搜集敏感文件,在这里简单介绍下常见的敏感文件(来源于《从0到1CTFer成长之路》)敏感目录泄露......