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

Apache POl

介绍

 
Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下,POI都是用于操作 Excel 文件。

Apache POl 的应用场景 

1.银行网银系统导出交易明细
2.各种业务系统导出Excel报表
3.批量导入业务数据 

入门案例


Apache Pol的maven坐标:

             <!-- poi --><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创建Excel文件并写入文件内容

  /*** 通过POI创建Excel文件并写入文件内容*/public static  void  write() throws IOException {//在内存中创建一个文件XSSFWorkbook excel = new XSSFWorkbook();//在excel文件中创建一个sheet页XSSFSheet sheet = excel.createSheet("info");//在sheet页中创建行对象,rownum的编号从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 outputStream = new FileOutputStream(new File("B:\\info.xlsx"));excel.write(outputStream);//关闭资源outputStream.close();excel.close();}

通过POI读取已经存在的Excel文件并输出文件内容到控制台

 public  static void read() throws IOException {//读取磁盘上已经存在的Excel文件XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("B:\\info.xlsx")));//读取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);}}

 

如果excel的格式过于复杂可以先创建好模版,再将数据填入

/*** 导出运营数据报表* @param response*/public 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));//通过POI将数据写入Excel文件中InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/1.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 outputStream = response.getOutputStream();excel.write(outputStream);//关闭资源excel.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}

 

 

相关文章:

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下&#xff0c;POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…...

高防服务器托管应注意什么

选择高防服务器托管主要考虑的因素&#xff1a;1.服务商的服务器大小。2.服务器的防御值大小。3.服务器机房的位置以及机房的资质。 具体内容如下&#xff1a; 1&#xff0e;服务器大小是按照U来定的&#xff0c;U是一种表示服务器外部尺寸的单位(计量单位&#xff1a;高度或厚…...

swagger-ui.html报错404,解决办法

swagger-ui.html报错404,解决办法&#xff01;现在后端开发项目中&#xff0c;为了节省时间&#xff0c;使用swagger插件&#xff0c;可以方便的快捷生成接口文档。但是如果你在请求前端页面路径比如&#xff1a;http://127.0.0.1:7777/swagger-ui.html。找不到。那是因为你的配…...

golang 函数式编程库samber/mo使用: Future

golang 函数式编程库samber/mo使用&#xff1a; Future 如果您对samber/mo库不了解&#xff0c; 请先阅读第一篇 Option 本节讲述Future的使用&#xff0c;它可以帮助我们处理异步编程问题。 示例 我们先来看看下面代码的示例&#xff0c; 注释解释了每一步的操作。 packa…...

【Spring连载】使用Spring Data访问 MongoDB(十四)----Mongodb特有的查询方法

【Spring连载】使用Spring Data访问 MongoDB&#xff08;十四&#xff09;----Mongodb特有的查询方法 一、定义通用查询方法二、MongoDB特有的查询方法2.1 地理空间查询Geo-spatial Queries2.2 基于JSON的查询方法和字段限制2.3 使用SpEL表达式的基于JSON的查询2.4 全文检索查询…...

消息中间件篇之RabbitMQ-消息重复消费

一、导致重复消费的情况 1. 网络抖动。 2. 消费者挂了。 消费者消费消息后&#xff0c;当确认消息还没有发送到MQ时&#xff0c;就发生网络抖动或者消费者宕机。那当消费者恢复后&#xff0c;由于MQ没有收到消息&#xff0c;而且消费者有重试机制&#xff0c;消费者就会再一次消…...

常见设计模式之单例模式

单例模式 单例模式是一种常用的软件设计模式&#xff0c;主要目的是确保一个类在整个应用程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点以获取该实例。 单例模式分为几种不同的实现方式&#xff0c;包括懒汉模式和饿汉模式。每种方式都有其特点和适用场景。例如…...

VL817-Q7 USB3.0 HUB芯片 适用于扩展坞 工控机 显示器

VL817-Q7 USB3.1 GEN1 HUB芯片 VL817-Q7 USB3.1 GEN1 HUB芯片 VIA Lab的VL817是一款现代USB 3.1 Gen 1集线器控制器&#xff0c;具有优化的成本结构和完全符合USB标准3.1 Gen 1规范&#xff0c;包括ecn和2017年1月的合规性测试更新。VL817提供双端口和双端口4端口配置&…...

【Android安全】Windows 环境下载 AOSP 源码

准备环境 安装 git 安装 Python 硬盘剩余容量最好大于 800G 打开 Git Bash&#xff0c;用 git 克隆源代码仓库 git clone https://android.googlesource.com/platform/manifest.git //没有梯子使用清华源 git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git这…...

Vue.js+SpringBoot开发快递管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快递区域模块2.4 快递货架模块2.5 快递档案模块 三、界面展示3.1 登录注册3.2 快递类型3.3 快递区域3.4 快递货架3.5 快递档案3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 …...

Linux/Spectra

Enumeration nmap 第一次扫描发现系统对外开放了22&#xff0c;80和3306端口&#xff0c;端口详细信息如下 22端口运行着ssh&#xff0c;80端口还是http&#xff0c;不过不同的是打开了mysql的3306端口 TCP/80 进入首页&#xff0c;点击链接时&#xff0c;提示域名不能解析&…...

C 嵌入式系统设计模式 08:硬件代理模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之一&…...

【k8s配置与存储--持久化存储(PV、PVC、存储类)】

1、PV与PVC 介绍 持久卷&#xff08;PersistentVolume&#xff0c;PV&#xff09; 是集群中的一块存储&#xff0c;可以由管理员事先制备&#xff0c; 或者使用存储类&#xff08;Storage Class&#xff09;来动态制备。 持久卷是集群资源&#xff0c;就像节点也是集群资源一样…...

【Vite】解决Vite http proxy error: Error: connect ECONNREFUSED

今天写bug&#xff0c;发现了这个问题 我经过我一晚上的搜索努力&#xff0c;在github上找到了解决办法&#xff0c;不得不说&#xff0c;交友网站还是很好用的。 参考 这一行是关键代码。 因为我连的是本地后台服务&#xff0c;所以最后配置成这样 server: {open: true,pro…...

FPGA领域顶级学术会议

FPGA领域顶级学术会议主要有FPGA,FCCM,FPL和FPT。 1 FPGA 会议全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 网站是:https://dl.acm.org/conference/fpga FPGA常年在美国举办,每年2月,偏FPGA基础研究; 该会议的论文免费下载。这个比…...

罗技鼠标滚轮模式介绍 | 鼠标滚轮异响 - 解决方案

滚轮模式介绍 针对罗技的滚轮模式进行介绍&#xff1a; 普通滚轮&#xff1a;滚动时有明显段落感&#xff0c;无法快速滚动。 智能滚轮&#xff1a;滚动力量较弱时&#xff0c;与普通滚轮无异&#xff1b;滚动力量大时&#xff0c;鼠标会自动减小滚轮阻尼&#xff0c;从而使滚…...

Scrapy与分布式开发(2.2):正则表达式

使用Python的re模块进行正则表达式操作详细讲解 一、引言 正则表达式是一种强大的文本处理工具,它使用特定的模式来搜索、匹配和替换文本。Python的re模块(正则表达式模块)提供了正则表达式匹配操作的所有功能。下面我们将详细讲解如何使用re模块进行正则表达式的操作。 …...

今年“全国爱耳日”主题确定!立聪堂助听器组织社区义诊

2024年3月3日是第二十五个“全国爱耳日”。 今年的活动主题定为“科技助听&#xff0c;共享美好生活”&#xff0c;旨在倡导全社会关注听力健康&#xff0c;并鼓励听力受损人群利用科技手段实现早期康复。 为响应这一主题&#xff0c;知名助听器验配连锁机构立聪堂迅速行动起…...

区块链智能合约开发

一.区块链的回顾 1.区块链 区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本 特征: 去中心化&#xff1a;简单来说&#xff0c;在网络上一个或多个服务器瘫痪的情况下&#xff0c;应用或服务仍然能够持续地运行&#xff0c;这就是去中心化。服务和应用部署在…...

Android 启动流程及 init 进程解析

一、Android 启动流程概括 按下电源键触发开机&#xff0c;从 ROM 加载引导程序 BootLoader 到 RAM 中&#xff0c;BootLoader 执行启动 Linux kernel&#xff0c;然后启动第一个用户进程 init&#xff0c;init 进程的工作包括挂载文件、创建文件目录、设置 selinux 安全策略&…...

AGI的认知发育曲线 vs 人类儿童:2026奇点大会发布的首份跨模态神经符号成长图谱(含127个可迁移认知里程碑)

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AGI与认知科学 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AGI-Neuro Interface”联合实验室展台&#xff0c;聚焦大语言模型与人类工作记忆建模的交叉验证。来自MIT McGovern研究所与DeepMind联合团…...

StarUML插件DDL实战:5分钟搞定ER图到MySQL建表脚本(含Java代码生成)

StarUML插件DDL实战&#xff1a;5分钟搞定ER图到MySQL建表脚本&#xff08;含Java代码生成&#xff09; 在数据库设计领域&#xff0c;效率往往决定着项目推进的速度。想象一下这样的场景&#xff1a;产品经理刚刚确认完需求&#xff0c;开发团队需要在两小时内完成数据库设计并…...

告别Socket编程:用RDMA Verbs API手把手教你构建一个高性能网络应用(附完整代码)

从Socket到RDMA&#xff1a;高性能网络编程实战指南 在当今数据密集型应用盛行的时代&#xff0c;传统Socket网络编程的性能瓶颈日益凸显。当延迟敏感型应用&#xff08;如金融交易系统、分布式数据库&#xff09;遇到微秒级响应需求时&#xff0c;RDMA&#xff08;远程直接内存…...

Orwell Dev-C++ 和 Embarcadero Dev-C++ 哪个更好

在选择 Orwell Dev-C 和 Embarcadero Dev-C 时&#xff0c;可以从以下几个角度进行比较&#xff1a;1. 开发背景Orwell Dev-C由独立开发者维护&#xff0c;是原始 Dev-C 的分支版本&#xff0c;专注于修复原版漏洞并保持轻量级特性。Embarcadero Dev-C由软件公司 Embarcadero 维…...

家里装修别乱接!电工师傅教你一眼分清零线火线,安全又省钱

家庭电路安全指南&#xff1a;零线火线快速识别与正确接线技巧 装修新房或改造旧电路时&#xff0c;最让人头疼的莫过于面对一堆颜色各异的电线不知如何下手。不少朋友抱着"反正都是电&#xff0c;接上能亮就行"的心态随意接线&#xff0c;轻则导致电器损坏&#xff…...

FPGA做PI控制,避开这3个坑:定点数、积分饱和与代码风格实战指南

FPGA实现PI控制的三大实战陷阱与避坑指南 当工程师们从MATLAB/Simulink的浮点仿真世界踏入FPGA的硬件实现领域时&#xff0c;往往会遭遇一系列意想不到的"暗礁"。我曾在一个电机控制项目中&#xff0c;花费整整两周时间才排查出一个由定点数溢出导致的PI控制器异常振…...

高通Ride平台镜像刷写实战:从QFIL到Fastboot的路径选择与避坑指南

1. 高通Ride平台镜像刷写入门指南 第一次接触高通Ride平台的开发者&#xff0c;往往会被各种刷写工具搞得晕头转向。作为一个在这个领域摸爬滚打多年的老手&#xff0c;我完全理解这种困惑。记得我第一次刷写Ride平台时&#xff0c;花了整整两天时间才搞明白QFIL和Fastboot的区…...

Splashtop XDisplay 实战指南:从零开始将iPad变身高效率触控副屏

1. 为什么你需要把iPad变成副屏&#xff1f; 每次看到同事用双屏办公&#xff0c;效率直接翻倍的样子&#xff0c;是不是特别羡慕&#xff1f;其实你包里那个吃灰的iPad&#xff0c;只需要一根数据线就能变身专业级触控副屏。我用了三年Splashtop XDisplay&#xff0c;从写代码…...

HR必备:OpenClaw批量筛选简历、发送面试通知,优化招聘流程

OpenClaw&#xff1a;重塑高效招聘&#xff0c;批量筛选简历与智能发送面试通知的实践指南引言&#xff1a;数字化时代招聘的挑战与机遇在当今竞争激烈的人才市场中&#xff0c;招聘已成为企业发展的核心驱动力之一。人力资源部门&#xff08;HR&#xff09;肩负着寻找、吸引、…...

避开这3个坑,你的OpenCV Python项目运行效率能快一倍

OpenCV Python性能优化实战&#xff1a;避开这3个效率黑洞 在计算机视觉项目的开发过程中&#xff0c;性能瓶颈往往隐藏在看似无害的代码片段里。当你的视频处理流水线开始卡顿&#xff0c;或是内存占用莫名飙升时&#xff0c;问题可能源于一些容易被忽视的编码习惯。本文将深入…...