当前位置: 首页 > news >正文

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

代码

数据写入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();}
}

读取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();}
}

外卖项目应用

基于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();}}

相关文章:

  • 软件测试/测试开发/人工智能丨视觉与图像识别自动化测试
  • inBuilder低代码平台新特性推荐-第八期
  • 22. 深度学习 - 自动求导
  • 基本算法:二分
  • 02.webpack中多文件打包
  • Spring Boot简介
  • 电子学会2023年6月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析
  • 广西柳州机械异形零部件三维扫描3D抄数全尺寸测绘建模-CASAIM中科广电
  • mongodb——概念介绍(文档,集合,固定集合,元数据,常用数据类型)
  • C/C++---------------LeetCode第1207.独一无二的出现次数
  • 使用Dockerfile构建hexo博客镜像,并部署
  • Qt QWebSocket实现JS调用C++
  • 广西南宁新能源汽车电机定子三维扫描3D尺寸测量检测-CASAIM中科广电
  • 数据仓库相关
  • 远勤山丨品质第一 服务先行 扎扎实实打造让消费者满意的产品
  • 深入了解以太坊
  • CSS 专业技巧
  • Docker容器管理
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Redux 中间件分析
  • text-decoration与color属性
  • Theano - 导数
  • 百度小程序遇到的问题
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 代理模式
  • 计算机在识别图像时“看到”了什么?
  • 前端之React实战:创建跨平台的项目架构
  • 浅谈Golang中select的用法
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 硬币翻转问题,区间操作
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云服务器如何修改远程端口?
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (C#)获取字符编码的类
  • (c语言)strcpy函数用法
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)正点原子I.MX6ULL u-boot移植
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (原)本想说脏话,奈何已放下
  • .htaccess配置常用技巧
  • .NET Standard 的管理策略
  • .net程序集学习心得
  • .sys文件乱码_python vscode输出乱码
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @DataRedisTest测试redis从未如此丝滑
  • @KafkaListener注解详解(一)| 常用参数详解
  • [C# WPF] 如何给控件添加边框(Border)?
  • [ffmpeg] av_opt_set 解析
  • [GN] 设计模式——面向对象设计原则概述
  • [Grafana]ES数据源Alert告警发送
  • [GXYCTF2019]禁止套娃
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂