JavaWeb(苍穹外卖)--学习笔记18(Apache POI)

前言

本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,用户端开发的流程大致为用户登录—商品浏览(其中涉及到缓存,之前写过)—添加/查看/清空购物车—下单支付(到现在没搞懂😵‍💫)—地址簿—订单查询/超时/取消处理(巨多)…还有我没学到的🤪🤪,统计功能实现之后,为了方便商家了解运营数据,我们一般以Excel表格的形式呈现出我们想要的数据,方便观看。

🙌先来认识一个新工具—Apache POI?

Apache POI(Poor Obfuscation Implementation)是 Apache 软件基金会的一个开源 Java 库。它的主要功能是读取、创建和操作 Microsoft Office 格式的文件,特别是:

Excel 文件(.xls 和 .xlsx)
Word 文件(.docx)
PowerPoint 文件(.pptx)
以及其他一些 Office 格式(如 Visio .vsd 等)

通过一个测试代码来看一下怎么使用Apache POI来创建Excel表格🤔

👍通过POI创建Excel文件并且写入文件指定内容

  1. 导入Maven
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId>
</dependency>
  1. 创建测试类:
package com.sky.test;...public class POITest {/** 通过POI创建Excel文件并且写入文件内容* */@Testpublic void writeTest() throws IOException {//在内存中创建一个Excel文件XSSFWorkbook excel = new XSSFWorkbook();//在Excel文件中创建一个Sheet页XSSFSheet sheet = excel.createSheet("info");//在Sheet中创建行对象,rownum编号从0开始XSSFRow row = sheet.createRow(1); //1代表第2行row.createCell(1).setCellValue("姓名");//创建单元格写入内容row.createCell(2).setCellValue("城市");//创建一个新行row = sheet.createRow(2);//第3行row.createCell(1).setCellValue("hhh");//创建单元格写入内容row.createCell(2).setCellValue("xxx");row = sheet.createRow(3);//第4行row.createCell(1).setCellValue("hhhh");//创建单元格写入内容row.createCell(2).setCellValue("xxxx");//上面写的都是在内存,现在想在磁盘看到FileOutputStream out = new FileOutputStream(new File("D://hhh/hhhh.xlsx"));//设置文件excel.write(out);//写入到文件//关闭资源out.close();excel.close();}
}

来看看实现:
在这里插入图片描述

✌️将读取磁盘上已经存在的Excel文件

@Test
public void readTest() throws IOException{FileInputStream in = new FileInputStream(new File("D://hhh/hhhh.xlsx"));//读取磁盘上已经存在的Excel文件XSSFWorkbook excel = new XSSFWorkbook(in);//读取Excel文件中的第一个Sheet页XSSFSheet sheet = excel.getSheetAt(0);//获取Sheet中最后一行行号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();}

来看看实现:
在这里插入图片描述

✅我用ai总结了一下上面所用的Apache POI 组件,每个组件针对特定的 Office 格式或技术::

1. XSSFWorkbook:

用途: 代表一个 Excel .xlsx 格式的工作簿(整个文件)。它是所有操作的起点和容器。无论是读还是写,都需要先创建或加载一个 XSSFWorkbook 实例。

写入: 使用 new XSSFWorkbook() 在内存中创建一个新的工作簿。
读取: 使用 new XSSFWorkbook(InputStream) 从已存在的文件流加载一个现有的工作簿。

3. XSSFSheet:
用途: 代表工作簿中的一个工作表(Sheet)。

写入: 使用 workbook.createSheet(“name”) 创建一个新的工作表。
读取: 使用 workbook.getSheetAt(index) 或 workbook.getSheet(“name”) 获取一个已存在的工作表。

4. XSSFRow:
用途: 代表工作表中的一行。
写入: 使用 sheet.createRow(rowIndex) 在指定行号(从0开始)创建一个新行。
读取: 使用 sheet.getRow(rowIndex) 获取指定行号的行对象。

5. XSSFCell:
用途: 代表行中的一个单元格。

写入: 使用 row.createCell(cellIndex) 在指定列号(从0开始)创建一个新单元格。
读取: 使用 row.getCell(cellIndex) 获取指定列号的单元格对象。

最后我们来看看项目中(导出Excel表) 代码开发

首先还是来看看前端,来看功能:
在这里插入图片描述
在统计界面的右上角有一个小按钮(数据导出),点击后,我们的前端便可把要统计的数据传给我们的后端,后端再返回一个Excel数据表

🙌在写代码前,先做一个准备工作:

先设计一个运营数据报表模板:

在这里插入图片描述
再在resources下面创建一个template包,然后把运营数据报表模板.xlsx复制进去。

在这里插入图片描述

admin下的ReportController类:

 /*** 导出Excel* @param response*/@GetMapping("/export")@ApiOperation("导出Excel")public void export(HttpServletResponse response) {reportService.exportBusinessData(response);}

ReportService类:

    /*** 导出营业数据* @param response*/void exportBusinessData(HttpServletResponse response);
}

ReportServiceImpl类:

@Overridepublic void exportBusinessData(HttpServletResponse response) {//1.查询数据库,获取数据 查询最近30天的营业数据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));//2.通过POI将数据输出到Excel文件中InputStream in =this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");try {//基于模板文件创建一个Excel表格对象XSSFWorkbook excel = new XSSFWorkbook(in);//填充数据-表格文件的sheet标签页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());}//3.使用输出流将Excel文件下载到客户端ServletOutputStream out = response.getOutputStream();excel.write(out);//释放资源out.close();excel.close();} catch (IOException e) {e.printStackTrace();}}

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

…。。。。。。。。。。。…请添加图片描述

…。。。。。。。。。。。…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93150.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenJDK 17 源码 安全点轮询的信号处理流程

OpenJDK 17 源码&#xff0c;安全点轮询的信号处理流程如下&#xff08;重点分析安全点轮询相关部分&#xff09;&#xff1a;核心信号处理流程信号触发&#xff1a;当线程访问安全点轮询内存页时&#xff08;SafepointMechanism::is_poll_address&#xff09;&#xff0c;会触…

InfluxDB 在工业控制系统中的数据监控案例(一)

工业控制系统数据监控的重要性**在工业领域&#xff0c;生产过程的复杂性和连续性使得数据监控成为保障生产稳定运行的关键环节。通过实时收集、处理和分析生产数据&#xff0c;企业能够及时掌握设备运行状态、产品质量信息以及生产流程的各项参数&#xff0c;从而为生产决策提…

嵌入式学习(day26)frambuffer帧缓冲

一、UI技术: User interface&#xff08;1&#xff09;framebuffer: 帧缓冲、帧缓存技术 Linux内核专门为图形化显示提供的一套应用程序接口。流程如下&#xff1a;1. 打开显示设备 (/dev/fb0) 2. 获取显示设备相关参数&#xff08;分辨率&#xff0c;像素格式&#xff09;---》…

408每日一题笔记 41-50

答案&#xff1a;A 解析&#xff1a;CSMA/CD 协议里&#xff0c;“争用期” 就是信号在总线上最远两个端点之间往返传输的时间&#xff0c;也叫冲突窗口&#xff0c;选 A。

【物联网】基于树莓派的物联网开发【26】——树莓派开启串口并配置串口助手Minicom

串口配置 &#xff08;1&#xff09;打开串口&#xff0c;终端输入命令&#xff1a; sudo raspi-config &#xff08;2&#xff09;串口设置选择Interfacing Options→Serial port→No→Yes→ok&#xff08;3&#xff09;设置开启&#xff0c;打开串口 &#xff08;4&#xff0…

考研/考公知识共享平台的设计与实现-项目分享

考研/考公知识共享平台的设计与实现-项目分享项目介绍项目摘要学生前台用例图管理员用例图系统流程图系统功能结构图实体图学生信息实体图资料信息管理实体图报考指南管理写在最后项目介绍 使用者&#xff1a;管理员、学生前台、学生后台 开发技术&#xff1a;MySQLJavaSpring…

一键设置 NTP 时区的脚本(亲测,适用于部署 K8S 的前置环境)

文章目录一、时区和时间同步的配置命令二、完整脚本ntp_timezone_setup.sh三、使用方法3.1、创建脚本3.2、赋予执行权限3.3、运行脚本3.4、验证一、时区和时间同步的配置命令 整理用于做时区和时间同步的配置几条命令分别如下&#xff1a; 1️⃣ 编辑 chrony 配置 vim /etc/…

BPMN编辑器技术实现总结AI时代的工作流编辑器

项目概述 基于 diagram.js 的 BPMN 流程设计器&#xff0c;通过依赖注入(DI)实现模块化扩展&#xff0c;自定义模块扩展与SVG图形渲染。后端工作流引擎自定义统一任务调度函数&#xff0c;实现异构模型统一调用。 核心技术架构 1. diagram.js 架构基础 核心模块组成 Canv…

两阶段最小二乘法(2SLS)与 工具变量(IV)模型

以下是关于两阶段最小二乘法&#xff08;2SLS&#xff09;与工具变量&#xff08;IV&#xff09;模型关系的系统解析&#xff0c;结合计量经济学理论与论文上下文进行说明&#xff1a;一、核心关系&#xff1a;2SLS是IV模型的实现方法 1. IV模型&#xff1a;解决内生性的理论框…

熬夜面膜赛道跑出的新物种

在快节奏的现代生活中&#xff0c;熬夜已成为都市人群的常态&#xff0c;深夜11点后的朋友圈总是一片“失眠”哀嚎。随之而来的是“熬夜肌”问题的激增——暗沉、干燥、屏障受损等诉求催生了庞大的熬夜面膜市场。2025年&#xff0c;中国面膜线上规模已达484亿元&#xff0c;其中…

20250813测试开发岗(凉)面

1. 自我介绍2. 你如何理解测开&#xff0c;你认为测开的工作有哪些3. 测试的时候包括哪些部分4. 就功能层面&#xff0c;你认为需要从那些部分考虑&#xff0c;形成一个完整并可执行的trace&#xff08;是这个词吧&#xff09;5. 你了解数据库吗&#xff08;我说只会比较基础的…

面向Python/C#开发者入门Java与Bukkit API

本教程将以"手持发射器箭矢机枪"功能为例&#xff0c;带你掌握Java语言基础和Bukkit API的核心概念&#xff0c;最终实现自主开发插件。 我们将通过剖析一个实际Java代码文件&#xff0c;逐步解析其运作机制&#xff0c;帮助你顺利将现有编程知识迁移到Java和Bukkit…

从100到0.3美元:GPT-5用价格战血洗大模型赛道

————————— 一、从 100 美元到 0.3 美元&#xff1a;史无前例的效率革命 ————————— 互联网女王 Mary Meeker 在《AI 趋势报告 2025》里写下这组数字&#xff1a; • 训练成本 8 年飙升 2400 倍&#xff1b; • 推理成本 2 年暴跌 99.7%。OpenAI 把“暴跌”推到…

第三十二天(文件操作安全)

文件遍历上传下载删除编辑包含等 $_FILES&#xff1a;PHP中一个预定义的超全局变量&#xff0c;用于在上传文件时从客户端接收文件&#xff0c;并将其保存到服务器上。它是一个包含上传文件信息的数组&#xff0c;包括文件名、类型、大小、临时文件名等信息。 $_FILES"表…

系统集成项目管理工程师【第十一章 规划过程组】规划风险应对、规划采购管理篇

系统集成项目管理工程师【第十一章 规划过程组】规划风险应对、规划采购管理篇 一、规划风险应对&#xff1a;为项目穿上"防护衣" 1. 什么是规划风险应对&#xff1f; 规划风险应对是基于风险量化分析结果&#xff0c;制定可选方案、选择应对策略并商定具体行动的过程…

20250813比赛总结

题目T1.volumeT2.storyT3.treeT4.game预计分数6060030实际分数306000T1.volume 确实是暴力&#xff0c;但我是用数组统计每个可能出现的数&#xff0c;于是3AC 3WA 4TLE。拿到全部分应该直接按照题目模拟。 T2.story 暴力dfs&#xff0c;由于忘记优化所以60pts&#xff0c;而且…

适合物流/应急/工业的对讲机,AORO M6 Pro构建高效指挥调度方案

在物流调度、应急救援与工业协同等对通信可靠性要求极高的领域中&#xff0c;专业对讲设备的技术迭代直接关系到任务执行效率与安全保障。AORO M6 Pro对讲机作为新一代融合通信终端&#xff0c;正以多模融合技术与国产化自主创新&#xff0c;为复杂场景下的高效调度提供坚实的技…

类和对象----中

这里写目录标题<font color"#FF00FF">1. 类和对象(中)<font color"#FF00FF">2. 构造函数<font color"#FF00FF">3. 析构函数<font color"#FF00FF">4. 拷⻉构造函数1. 类和对象(中) 类的默认成员函数&#xff1…

CAD 的 C# 开发中,对多段线(封闭多边形)内部的点进行 “一笔连线且不交叉、不出界

本质上是约束条件下的路径规划问题&#xff0c;核心是找到一条连续路径遍历所有点&#xff0c;同时满足&#xff1a; 路径不与自身交叉&#xff1b; 路径全程在多段线&#xff08;多边形&#xff09;内部&#xff1b; 路径连续&#xff08;一笔画&#xff09;。核心思路与算法步…

ZED 2i相机调试

1. 测试 ZED SDK /usr/local/zed/tools/ZED_Diagnostic/usr/local/zed/tools/ZED_Explorer2. 安装SDK How to Install ZED SDK on Linux - Stereolabs 安装命令&#xff1a; sudo apt install zstd./ZED_SDK_Ubuntu20_cuda12.1_tensorrt8.6_v5.0.5.zstd.run