Apache POI 入门·第一话
文章目录
- 1 摘要
- 2 Apache POI
- 2.1 介绍
- 2.2 应用场景
- 2.3 入门案例
- 2.3.1 将数据写入Excel文件
- 2.3.1.1 导入POI maven坐标
- 2.3.1.2 代码开发
- 2.3.1.3 实现效果
- 2.3.2 读取Excel文件中的数据
- 2.3.3 实现效果
- 2.4 开发案例——导出运营数据Excel报表
- 2.4.1 产品原型
- 2.4.2 接口设计
- 2.4.3 代码实现
- 2.4.3.1 Controller层
- 2.4.3.2 Service层
- 2.4.3.3 Service层实现类
- 2.4.3.4 效果演示
1 摘要
文章主要自从POI的
介绍、应用场景、入门案例、开发案例入手POI入门学习。
2 Apache POI
2.1 介绍
Apache POI :处理Miscrosoft Office各种文件格式的开源项目,如:使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。
注:本文侧重于讲解POI 操作Excel文件
2.2 应用场景
- 银行网银系统导出交易明细
- 各种业务系统导出Excel报表
2.3 入门案例
2.3.1 将数据写入Excel文件
2.3.1.1 导入POI 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>
2.3.1.2 代码开发
注意:Excel中每行下标均从下标0开始。
/*** 基于POI向Excel文件写入数据* @throws Exception*/public static void write() throws Exception{//在内存中创建一个Excel文件对象XSSFWorkbook excel = new XSSFWorkbook();//创建sheet页XSSFSheet sheet = excel.createSheet("exceltest");//在sheet页中创建行,下标0 开始 ,0表示第一行XSSFRow row1 = sheet.createRow(0);//创建单元格并在单元格中设置值,单元格编号也是从 下标0 开始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:\\workData\\POItest\\exceltest.xlsx"));//通过输入流将内存中的Excel文件写入到磁盘上excel.write(out);//关闭资源out.flush();out.close();excel.close();}public static void main(String[] args) throws Exception {write();System.out.println("==写入成功==");}
2.3.1.3 实现效果

2.3.2 读取Excel文件中的数据
public static void read() throws Exception {FileInputStream in = new FileInputStream(new File("D:\\workData\\POItest\\exceltest.xlsx"));//通过输入流读取指定的Excel文件XSSFWorkbook excel = new XSSFWorkbook(in);//获取Excel文件中的第一个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();//获取行的第三个单元格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 {//write();//System.out.println("==写入成功==");read();System.out.println("==读取成功==");}
2.3.3 实现效果

2.4 开发案例——导出运营数据Excel报表
2.4.1 产品原型

业务规则:
- 导出Excel形式的报表文件
- 导出最近30天的运营数据
2.4.2 接口设计

2.4.3 代码实现
- 设计Excel模板文件
- 查询近30天的运营数据
- 将查询到的运营数据写入模板文件
- 通过输出流将Excel文件下载到客户端浏览器
2.4.3.1 Controller层
/*** 导出Excel报表接口* @return*/@GetMapping("export")@ApiOperation("导出Excel报表接口")public void export(HttpServletResponse response){reportService.export(response);}
2.4.3.2 Service层
/*** 导出Excel报表接口*/void export(HttpServletResponse response);
2.4.3.3 Service层实现类
/*** 导出Excel报表接口*/@Overridepublic void export(HttpServletResponse response) {LocalDate begin = LocalDate.now().minusDays(30);LocalDate end = LocalDate.now().minusDays(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 row3 = sheet.getRow(3);row3.getCell(2).setCellValue(businessData.getTurnover());row3.getCell(4).setCellValue(businessData.getOrderCompletionRate());row3.getCell(6).setCellValue(businessData.getNewUsers());//获得第5行XSSFRow row5 = sheet.getRow(4);row5.getCell(2).setCellValue(businessData.getValidOrderCount());row5.getCell(4).setCellValue(businessData.getUnitPrice());for (int i = 0; i < 30; i++) {LocalDate date = begin.plusDays(i);//for循环遍历查询出来的 营业数据,如若不然只会有一样的重复数据//BusinessDataVO businessData2 = workspaceService.getBusinessData(LocalDateTime.of(begin,LocalTime.MIN),LocalDateTime.of(end,LocalTime.MAX));BusinessDataVO businessData2 = workspaceService.getBusinessData(LocalDateTime.of(date, LocalTime.MIN), LocalDateTime.of(date, LocalTime.MAX));//准备明细数据XSSFRow row = sheet.getRow(7 + i);row.getCell(1).setCellValue(date.toString());row.getCell(2).setCellValue(businessData2.getTurnover());row.getCell(3).setCellValue(businessData2.getValidOrderCount());row.getCell(4).setCellValue(businessData2.getOrderCompletionRate());row.getCell(5).setCellValue(businessData2.getUnitPrice());row.getCell(6).setCellValue(businessData2.getNewUsers());}//通过输出流将文件下载到客户端浏览器中ServletOutputStream out = response.getOutputStream();excel.write(out);//关闭资源out.flush();out.close();excel.close();} catch (Exception e) {e.printStackTrace();}}
2.4.3.4 效果演示

相关文章:
Apache POI 入门·第一话
文章目录1 摘要2 Apache POI2.1 介绍2.2 应用场景2.3 入门案例2.3.1 将数据写入Excel文件2.3.1.1 导入POI maven坐标2.3.1.2 代码开发2.3.1.3 实现效果2.3.2 读取Excel文件中的数据2.3.3 实现效果2.4 开发案例——导出运营数据Excel报表2.4.1 产品原型2.4.2 接口设计2.4.3 代码…...
8个python自动化脚本提高打工人幸福感~比心~
人生苦短,我用Python 最近有许多打工人都找我说打工好难 每天都是执行许多重复的任务, 例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等, 使用自动化脚本,就无需手动一次又一次地完成这些任务, 非常方便…...
【嵌入式烧录/刷写文件】-1-详解Motorola S-record(S19/SREC/mot/SX)格式文件
目录 1 什么是Motorola S-record 2 Motorola S-record的格式 2.1 Motorola S-record的结构 2.1.1 “Record type记录类型”的说明 2.1.2 “Record length记录长度”的说明 2.1.3 如何计算“Checksum校验和” 2.2 Record order记录顺序 2.3 Text line terminator文本行终…...
图形视图界面 图形效果
Qt的标准图形效果类: QGraphicsBlurEffect提供模糊效果QGraphicsColorizeEffect提供染色效果QGraphicsDropShadowEffect提供阴影效果QGraphicsOpacityEffect提供透明效果 QGraphicsBlurEffect(模糊效果) 模糊效果会模糊源。此效果对于减少细…...
ElementUI学习笔记
目录 一、简单介绍 二、安装 1、下载 2、引入 三、布局 1、简介 2、使用 3、好处 四、布局容器 1、常见排布 2、调整样式 五、按钮 1、简单引用 2、改变样式 3、加载中效果 六、表格 1、简单使用 2、样式修改 七、对话框 1、简单使用 2、添加自定义内容 3、…...
安装KVM并创建虚拟机及基本使用
#环境说明:Centos7 环境准备: CPU开启虚拟化,给宿主机的CPU和内存分配足够多的配置 安装KVM 1.安装相关软件包 yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer 软件包简介: qemu-kvm: 为kvm提供…...
一种LCD屏闪问题的调试
背景 项目使用ESP32-S3 RGB接口驱动的LCD, 框架 idf-v5.0, LVGL-v7.11 显示画面正常, 但肉眼可见的像是背光在闪烁, 背光电路是应用很久的经典电路, 且排查背光驱动无错, 但开机一段时间后, 闪烁会明显减轻 记录 这块屏的显示驱动芯片为ST7701S, 查看芯片手册有说明特定的上…...
Java程序运行在Docker等容器环境有哪些新问题?
第30讲 | Java程序运行在Docker等容器环境有哪些新问题? 如今,Docker 等容器早已不是新生事物,正在逐步成为日常开发、部署环境的一部分。Java 能否无缝地运行在容器环境,是否符合微服务、Serverless 等新的软件架构和场景&#x…...
C语言面试最常问的三个关键字
文章目录前言一,static关键字的作用二,const 关键字的作用2.1, 修饰局部变量2.2,修饰指针2.3, 修饰函数形参2.4,修饰函数的返回值三,volatile关键字的作用前言 面试的时候,C语言最常…...
【Linux】-初识Linux
作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【Linux】 分享:逆着光行走,任风吹雨打。 ——《起风了》 主要内容:Linux的一些最基本指令,Linux的小程序,Linux关于连…...
精选7个 Python 学习资源库,助你成为优秀的开发者
当你在学习编程时,很容易被大量的资源所吓到,不知道该从何开始。 GitHub 仓库是一个很好的起点,因为它们提供了一种非常实用的方式来了解实际的编程应用。你可以查看其他人的代码,并将其与自己的代码进行比较和学习。 当涉及到 …...
【大数据处理与可视化】三 、Pandas库的运用
【大数据处理与可视化】三 、Pandas库的运用实验目的实验内容实验步骤一、使用pandas库分别创建Series对象和DataFrame对象,并对创建的对象使用索引、排序等相关操作;练习DataFrame对象的统计计算和统计描述的功能。1&2、创建一个DataFrame(d…...
FPGA解码SDI视频任意尺寸缩放拼接输出 提供工程源码和技术支持
目录1、前言2、SDI理论练习3、设计思路和架构SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缩放FDMA图像缓存实现拼接HDMI驱动4、vivado工程详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案&#…...
线索二叉树结构
线索二叉树结构1.线索二插树的作用2.线索二叉树的定义3.线索二叉树的结构4. 线索二叉树的操作4.1. 建立一棵中序线索二叉树4.2. 在中序线索二叉树上查找任意结点的中序前驱结点4.3. 在中序线索二叉树上查找任意结点的中序后继结点4.4. 在中序线索二叉树上查找任意结点在先序下的…...
6.网络爬虫——BeautifulSoup详讲与实战
网络爬虫——BeautifulSoup详讲与实战BeautifulSoup简介:BS4下载安装BS4解析对象Tag节点遍历节点find_all()与find()find_all()find()豆瓣电影实战前言: 📝📝此专栏文章是专门针对网络爬虫基础,欢迎免费订阅&#…...
Vue:路由管理模式
三种模式 Vue.js 的路由管理有三种模式: Hash 模式(默认):在 URL 中使用 # 符号来管理路由。例如,http://example.com/#/about。这个模式的好处是可以避免浏览器向服务器发送不必要的请求,并且不需要特殊…...
7个最好的PDF编辑器,帮你像编辑Word一样编辑PDF
PDF 是具有数字思维的组织的重要交流工具。提供高效的工作流程和更好的安全性,可以创建重要文档并与客户、同事和员工共享。文档的布局已锁定,因此无论在什么设备上查看,格式都保持不变。这是让每个人保持一致的好方法——尤其是那些使用Micr…...
【数据结构】树的介绍
文章目录前言树的概念及结构树的概念树的表示树在实际中的运用二叉树的概念及结构二叉树的概念现实中的二叉树特殊的二叉树二叉树的性质二叉树的储存结构顺序存储链式存储写在最后前言 🚩本章给大家介绍一下树。树的难度相对于前面的数据结构来说,又高了…...
CoreDNS 性能优化
CoreDNS 作为 Kubernetes 集群的域名解析组件,如果性能不够可能会影响业务,本文介绍几种 CoreDNS 的性能优化手段。合理控制 CoreDNS 副本数考虑以下几种方式:根据集群规模预估 coredns 需要的副本数,直接调整 coredns deployment 的副本数:k…...
前端三剑客常见面试题及其答案
目录 1、什么是 HTML? 2、什么是 CSS? 3、什么是 JavaScript? 4、什么是盒模型? 5、什么是浮动? 6、什么是定位? 7、什么是选择器? 8、什么是事件? 前端的三剑客指的是 HTML…...
Global Mapper 26空间数据转换安装教程 Windows版:自定义路径+Crack替换指南
它以出色的格式兼容性(支持数百种矢量和栅格格式,如 CAD、SHP、GeoTIFF 等)和高效的数据处理能力著称,广泛应用于测绘、林业、矿业及土地规划领域。 一、准备工作 安装包下载:https://pan.quark.cn/s/a361bbddd854&a…...
AI专著生成神器来袭!用AI写专著,20万字专著轻松到手!
创新是学术专著的核心,也是写作中最具挑战性的部分。一部合格的专著不能仅仅是已有成果的简单堆叠,而是需要展现贯穿整本书的独到见解、理论框架或者研究方法。面对浩如烟海的学术文献,寻找那些尚未被挖掘的研究空白实属不易——有时选题已经…...
想选靠谱的呼入语音机器人?这三个核心维度别忽略
电商大促期间客服热线占线不断,客户等待几分钟后愤然挂断;夜间咨询无人值守,潜在商机白白流失;传统语音机器人只会机械重复 “请按 1”,遇到稍微复杂的问题就答非所问…… 这些场景几乎是每个企业客服部门的日常痛点。…...
JSON差异对比终极指南:快速定位JSON数据变化的免费在线工具
JSON差异对比终极指南:快速定位JSON数据变化的免费在线工具 【免费下载链接】online-json-diff 项目地址: https://gitcode.com/gh_mirrors/on/online-json-diff 还在为JSON数据对比而烦恼吗?无论你是前端开发者、后端工程师,还是数据…...
3个妙招突破百度网盘限速:baidu-wangpan-parse终极解析指南
3个妙招突破百度网盘限速:baidu-wangpan-parse终极解析指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否经历过这样的场景?急着下载一份重要的…...
DeepSpeech终极指南:离线语音识别的深度学习引擎完整实践
DeepSpeech终极指南:离线语音识别的深度学习引擎完整实践 【免费下载链接】DeepSpeech DeepSpeech is an open source embedded (offline, on-device) speech-to-text engine which can run in real time on devices ranging from a Raspberry Pi 4 to high power G…...
如何构建企业级权限系统:OpenFGA高性能授权引擎的终极指南
如何构建企业级权限系统:OpenFGA高性能授权引擎的终极指南 【免费下载链接】openfga A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar 项目地址: https://gitcode.com/gh_mirrors/op/ope…...
MoE稀疏激活:大模型推理效率革命的核心原理与工程实践
1. 这不是参数堆砌,而是“动态稀疏激活”的工程革命你可能已经看到过那条刷屏的推文:“GPT-4有1.8万亿参数,但每生成一个token只用其中2%。”——这句话像一道闪电劈开了大模型圈的认知惯性。它背后根本不是在炫耀数字有多吓人,而…...
盐印相不是滤镜,是光学物理建模!:深度解析Midjourney --sref 与 --style raw 联动实现银盐晶体模拟原理
更多请点击: https://codechina.net 第一章:盐印相不是滤镜,是光学物理建模! 盐印相(Salt Print)作为一种19世纪诞生的早期摄影工艺,其成像本质并非数字图像处理中的风格化滤镜,而是…...
(QBuffer配合 QDataStream)二进制序列化
QByteArray arr; QBuffer buf(&arr); buf.open(QIODevice::WriteOnly); QDataStream out(&buf); out << QString(“hello”) << 123; // 序列化 // 反序列化 buf.seek(0); QDataStream in(&buf); QString s; int n; in >> s >> n;...



