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

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自动化脚本提高打工人幸福感~比心~

人生苦短&#xff0c;我用Python 最近有许多打工人都找我说打工好难 每天都是执行许多重复的任务&#xff0c; 例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等&#xff0c; 使用自动化脚本&#xff0c;就无需手动一次又一次地完成这些任务&#xff0c; 非常方便…...

【嵌入式烧录/刷写文件】-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的标准图形效果类&#xff1a; QGraphicsBlurEffect提供模糊效果QGraphicsColorizeEffect提供染色效果QGraphicsDropShadowEffect提供阴影效果QGraphicsOpacityEffect提供透明效果 QGraphicsBlurEffect&#xff08;模糊效果&#xff09; 模糊效果会模糊源。此效果对于减少细…...

ElementUI学习笔记

目录 一、简单介绍 二、安装 1、下载 2、引入 三、布局 1、简介 2、使用 3、好处 四、布局容器 1、常见排布 2、调整样式 五、按钮 1、简单引用 2、改变样式 3、加载中效果 六、表格 1、简单使用 2、样式修改 七、对话框 1、简单使用 2、添加自定义内容 3、…...

安装KVM并创建虚拟机及基本使用

#环境说明&#xff1a;Centos7 环境准备&#xff1a; CPU开启虚拟化&#xff0c;给宿主机的CPU和内存分配足够多的配置 安装KVM 1.安装相关软件包 yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer 软件包简介&#xff1a; qemu-kvm: 为kvm提供…...

一种LCD屏闪问题的调试

背景 项目使用ESP32-S3 RGB接口驱动的LCD, 框架 idf-v5.0, LVGL-v7.11 显示画面正常, 但肉眼可见的像是背光在闪烁, 背光电路是应用很久的经典电路, 且排查背光驱动无错, 但开机一段时间后, 闪烁会明显减轻 记录 这块屏的显示驱动芯片为ST7701S, 查看芯片手册有说明特定的上…...

Java程序运行在Docker等容器环境有哪些新问题?

第30讲 | Java程序运行在Docker等容器环境有哪些新问题&#xff1f; 如今&#xff0c;Docker 等容器早已不是新生事物&#xff0c;正在逐步成为日常开发、部署环境的一部分。Java 能否无缝地运行在容器环境&#xff0c;是否符合微服务、Serverless 等新的软件架构和场景&#x…...

C语言面试最常问的三个关键字

文章目录前言一&#xff0c;static关键字的作用二&#xff0c;const 关键字的作用2.1&#xff0c; 修饰局部变量2.2&#xff0c;修饰指针2.3&#xff0c; 修饰函数形参2.4&#xff0c;修饰函数的返回值三&#xff0c;volatile关键字的作用前言 面试的时候&#xff0c;C语言最常…...

【Linux】-初识Linux

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Linux】 分享&#xff1a;逆着光行走&#xff0c;任风吹雨打。 ——《起风了》 主要内容&#xff1a;Linux的一些最基本指令&#xff0c;Linux的小程序&#xff0c;Linux关于连…...

精选7个 Python 学习资源库,助你成为优秀的开发者

当你在学习编程时&#xff0c;很容易被大量的资源所吓到&#xff0c;不知道该从何开始。 GitHub 仓库是一个很好的起点&#xff0c;因为它们提供了一种非常实用的方式来了解实际的编程应用。你可以查看其他人的代码&#xff0c;并将其与自己的代码进行比较和学习。 当涉及到 …...

【大数据处理与可视化】三 、Pandas库的运用

【大数据处理与可视化】三 、Pandas库的运用实验目的实验内容实验步骤一、使用pandas库分别创建Series对象和DataFrame对象&#xff0c;并对创建的对象使用索引、排序等相关操作&#xff1b;练习DataFrame对象的统计计算和统计描述的功能。1&#xff06;2、创建一个DataFrame(d…...

FPGA解码SDI视频任意尺寸缩放拼接输出 提供工程源码和技术支持

目录1、前言2、SDI理论练习3、设计思路和架构SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缩放FDMA图像缓存实现拼接HDMI驱动4、vivado工程详解5、上板调试验证并演示6、福利&#xff1a;工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案&#…...

线索二叉树结构

线索二叉树结构1.线索二插树的作用2.线索二叉树的定义3.线索二叉树的结构4. 线索二叉树的操作4.1. 建立一棵中序线索二叉树4.2. 在中序线索二叉树上查找任意结点的中序前驱结点4.3. 在中序线索二叉树上查找任意结点的中序后继结点4.4. 在中序线索二叉树上查找任意结点在先序下的…...

6.网络爬虫——BeautifulSoup详讲与实战

网络爬虫——BeautifulSoup详讲与实战BeautifulSoup简介&#xff1a;BS4下载安装BS4解析对象Tag节点遍历节点find_all()与find()find_all()find()豆瓣电影实战前言&#xff1a; &#x1f4dd;​&#x1f4dd;​此专栏文章是专门针对网络爬虫基础&#xff0c;欢迎免费订阅&#…...

Vue:路由管理模式

三种模式 Vue.js 的路由管理有三种模式&#xff1a; Hash 模式&#xff08;默认&#xff09;&#xff1a;在 URL 中使用 # 符号来管理路由。例如&#xff0c;http://example.com/#/about。这个模式的好处是可以避免浏览器向服务器发送不必要的请求&#xff0c;并且不需要特殊…...

7个最好的PDF编辑器,帮你像编辑Word一样编辑PDF

PDF 是具有数字思维的组织的重要交流工具。提供高效的工作流程和更好的安全性&#xff0c;可以创建重要文档并与客户、同事和员工共享。文档的布局已锁定&#xff0c;因此无论在什么设备上查看&#xff0c;格式都保持不变。这是让每个人保持一致的好方法——尤其是那些使用Micr…...

【数据结构】树的介绍

文章目录前言树的概念及结构树的概念树的表示树在实际中的运用二叉树的概念及结构二叉树的概念现实中的二叉树特殊的二叉树二叉树的性质二叉树的储存结构顺序存储链式存储写在最后前言 &#x1f6a9;本章给大家介绍一下树。树的难度相对于前面的数据结构来说&#xff0c;又高了…...

CoreDNS 性能优化

CoreDNS 作为 Kubernetes 集群的域名解析组件&#xff0c;如果性能不够可能会影响业务&#xff0c;本文介绍几种 CoreDNS 的性能优化手段。合理控制 CoreDNS 副本数考虑以下几种方式:根据集群规模预估 coredns 需要的副本数&#xff0c;直接调整 coredns deployment 的副本数:k…...

前端三剑客常见面试题及其答案

目录 1、什么是 HTML&#xff1f; 2、什么是 CSS&#xff1f; 3、什么是 JavaScript&#xff1f; 4、什么是盒模型&#xff1f; 5、什么是浮动&#xff1f; 6、什么是定位&#xff1f; 7、什么是选择器&#xff1f; 8、什么是事件&#xff1f; 前端的三剑客指的是 HTML…...

【DFS专题】深度优先搜索 “暴搜”优质题单推荐 10道题(C++ | 洛谷 | acwing)

文章目录题单一、模板 [极为重要]全排列DFS组合型DFS指数DFS二、专题烤鸡 (指数BFS&#xff09;P1088 火星人 【全排列】P1149 火彩棒 [预处理 ]P2036 PERKETP1135 奇怪的电梯 暴力P1036 [NOIP2002 普及组] 选数 &#xff08;组合&#xff09;P1596 [USACO10OCT]Lake Counting …...

微信小程序自定义组件生命周期有哪些?

微信小程序自定义组件的生命周期函数分为三类&#xff1a; 创建时执行的生命周期函数、更新时执行的生命周期函数和销毁时执行的生命周期函数。 下面是具体的生命周期函数及其触发时机&#xff1a; 创建时执行的生命周期函数&#xff1a; created&#xff1a;在组件实例刚刚…...

Linux就该这么学(六)

一、从“/”开始 Linux 系统中的文件和目录名称是严格区分大小写的。例如&#xff0c;root、rOOt、rooT 均代表不同的目录&#xff0c;并且文件名称中不得包含斜杠&#xff08;/&#xff09;。Linux 系统中的文件存储结构如下图所示。 在 Linux 系统中&#xff0c;最常见的目录…...

目标检测算法——YOLOv5/v7/v8改进结合涨点Trick之Wise-IoU(超越CIOU/SIOU)

超越CIOU/SIOU | Wise-IoU助力YOLO强势涨点&#xff01;&#xff01;&#xff01; 论文题目&#xff1a;Wise-IoU: Bounding Box Regression Loss with Dynamic Focusing Mechanism 论文链接&#xff1a;https://arxiv.org/abs/2301.10051 ​ 近年来的研究大多假设训练数据中的…...

【蓝桥杯选拔赛真题39】python输出数字组合 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python输出数字组合 一、题目要求 1、编程实现 2、输入输出...

网络安全工程师做什么?

​ 网络安全很复杂。数字化转型、远程工作和不断变化的威胁形势需要不同的工具和不同的技能组合。 系统必须到位以保护端点、身份和无边界网络边界。负责处理这种复杂安全基础设施的工作角色是网络安全工程师。 简而言之&#xff0c;网络安全工程师是负责设计和实施组织安全系…...

总结:K8S运维常用命令

一、部署./kubectl apply -f biz-healing-pod.yaml 二、查看部署的资源1、podkubectl get pod -A&#xff1a;获取所有pod没有IP&#xff1f;用-o wide参数看详细信息&#xff1a;./kubectl get pod -n deepflow -o wide2、service查看hubble-manager命名空间下有哪些service/d…...

你是真的“C”——进行动态内存分配库函数的使用详解

你是真的“C”——申请动态空间库函数的使用详解&#x1f60e;前言&#x1f64c;一、为什么需要动态内存分配&#xff1f;&#x1f49e;free 函数&#x1f618;malloc 库函数&#x1f618;calloc 库函数&#x1f618;realloc 库函数&#x1f618;总结撒花&#x1f49e;&#x1…...

Python|蓝桥杯进阶第五卷——数论

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…...

用Python实现单例模式

什么是单例模式单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c;让所有需要调用的地方都共享这一单例对象…...

泰安直聘网官网/seo搜索引擎优化排名

工厂模式之观察者模式...

大岭山网站建设公司/企业网站建设公司

已结贴√问题点数&#xff1a;20 回复次数&#xff1a;7Android传感器API之&#xff1a;加速度Accelerometer功能源码加速度传感器&#xff0c;主要是感应手机的运动。捕获三个参数&#xff0c;分别表示空间坐标系中X、Y、Z轴方向上的加速度减去重力加速度在相应轴上的分量&…...

网页制作与网站建设宝典 pdf/网站建设是什么

0&#xff1a;引言 Zenfone2性价比高&#xff0c;但是原生的华硕系统&#xff0c;无法root,加上google那一套东西无法安装&#xff0c;所以开始了折腾过程&#xff0c;自行youtube,google后刷机成功&#xff0c;现在刷机详细过程和需要材料记录一番&#xff01; 注意&#xff1…...

什么可以做冷门网站/怎么做好推广和营销

1. HTML发展历史介绍 2. 浏览器支持 2.1 新增标签支持 在html5 中新增了很多的标签&#xff0c;其中包括8个新增语义结构标签。header, section, footer, aside, nav, main, article, figure &#xff0c;但是在IE的一些版本中并不能够有效的支持。 /* 人为的进行一些处理&…...

广东今日头条新闻/网络推广优化品牌公司

使用 ALTER SECURITY LABEL COMPONENT 语句向当前数据库中的一个现有的安全标签构件中 添加一个或多个元件。该语句是 SQL ANSI/ISO 标准的扩展。 image.png 用法 只有 DBSECADM 可以声明 ALTER SECURITY LABEL COMPONENT 语句&#xff0c;此语句定义现有安 全标签构件的新元件…...

安阳区号码/青岛seo整站优化哪家专业

第一步 收集并下载xp的安全补丁 在微软里一个一个下载&#xff1f;不但麻烦&#xff0c;而且还会遗漏&#xff0c;我们用个能批量下载所有补丁的软件Windows Updates Downloader 点击下载。该软件需要Microsoft .NET Framework 2.0支持点击下载。安装Windows Updates Downloade…...