《苍穹外卖》知识梳理P11-Apache POI导出报表

2024-02-19 02:44

本文主要是介绍《苍穹外卖》知识梳理P11-Apache POI导出报表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.Apache POI

可以通过Apache POI处理excel文件,核心操作是读和写

应用场景

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

使用步骤

1.导入maven坐标

		<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency>

2.测试代码(写操作)

	public class PoiTest {/*** 写操作* 通过POI创建excel文件并写入文件内容*/public static void write() throws IOException {//在内存中创建一个excel文件XSSFWorkbook表示excel文件XSSFWorkbook excel = new XSSFWorkbook();//在excel文件中创建一个sheet页XSSFSheet sheet = excel.createSheet("info");//在sheet页中创建行对象,i表示第i+1行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("东京");//通过输出流将内存中的内容输出到文件中FileOutputStream fileOutputStream=new FileOutputStream(new File("D:\\info.xlsx"));excel.write(fileOutputStream);fileOutputStream.close();excel.close();}public static void main(String[] args) throws Exception {write();}}

3.运行结果(写操作)
在这里插入图片描述
4.测试代码(读操作)

	public class PoiTest {/*** 通过POI读取excel文件中内容*/public static void read() throws IOException {//通过输入流读取一个磁盘中的文件内容;FileInputStream inputStream = new FileInputStream(new File("D:\\info.xlsx"));//在内存中创建一个excel文件XSSFWorkbook表示excel文件,并传入输入流XSSFWorkbook excel=new XSSFWorkbook(inputStream);//按照sheet页的名称读取XSSFSheet sheet=excel.getSheetAt(0);int lastRowNum = sheet.getLastRowNum();//获取有文字的最后一行的行号(从0开始);for (int i = 1; i < lastRowNum; i++) {//获取某一行XSSFRow row=sheet.getRow(i);if (row==null) continue;//获取单元格对象String cellValue=row.getCell(1).getStringCellValue();String cellValue1=row.getCell(2).getStringCellValue();System.out.println(cellValue+" "+cellValue1);}//关闭输入流inputStream.close();//关闭资源excel.close();}public static void main(String[] args) throws Exception {//        write();read();}}

5.运行结果(读操作)
在这里插入图片描述

二.导出Excel报表

由于实际业务中可能会有复杂的报表格式,如果直接使用POI进行读取操作十分繁琐,通常是先在windows上对报表格式进行设计,得到一个模版文件,直接读入模版文件进行操作即可

  • 设计模版文件
  • 查询xx天的数据
  • 将查询到的数据写入模版文件
  • 通过输出流将excel文件下载到客户端浏览器

实现步骤

  • 项目中导入模版文件,在src/main/resources/下新建template目录用来存放模版文件,将模版.xlsx导入
    在这里插入图片描述
  • 编写代码,对指定位置进行填充,写入excel文件中的格式基本是固定的,我认为关键在于传递的参HttpServletResponse response,response.getOutputStream(): 通过调用response对象的getOutputStream()方法,获取到一个Servlet输出流。Servlet输出流是用于向客户端发送数据的输出流,通过这个输出流可以将数据发送到客户端。excel.write(outputStream): 调用excel对象的write()方法,将Excel文件内容写入到之前获取的Servlet输出流中。这会将Excel文件的内容写入到HTTP响应的输出流中,实际上是将Excel文件的字节流发送到客户端浏览器。然后客户端浏览器获得响应后自动开始下载文件.
	//通过输出流将excel下载到客户浏览器ServletOutputStream outputStream = response.getOutputStream();excel.write(outputStream);//关闭资源outputStream.close();excel.close();

业务层完整代码

	/*** 导出运行数据报表** @param response*/@Overridepublic void exportBusinessData(HttpServletResponse response) {//查数据库获取营业数据LocalDate dateBegin = LocalDate.now().minusDays(30);LocalDate dateEnd = LocalDate.now().minusDays(1);//将日期转换为详细时间LocalDateTime dateStartPoint = LocalDateTime.of(dateBegin, LocalTime.MIN);LocalDateTime dateEndPoint = LocalDateTime.of(dateEnd, LocalTime.MAX);BusinessDataVO businessData = workspaceService.getBusinessData(dateStartPoint, dateEndPoint);ClassLoader loader = getClass().getClassLoader();InputStream stream = loader.getResourceAsStream("template/运营数据报表模板.xlsx");log.info("读入的输入流stream{}",stream);//从类路径下边读取资源InputStream inputStream = ReportServiceImpl.class.getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
//        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");try {//基于模版文件创建一个新的excel文件XSSFWorkbook excel=new XSSFWorkbook(inputStream);XSSFSheet sheet1 = excel.getSheet("Sheet1");//填充数据,填充时间sheet1.getRow(1).getCell(1).setCellValue("时间"+dateBegin+"至"+dateEnd);//获得第四行XSSFRow row=sheet1.getRow(3);row.getCell(2).setCellValue(businessData.getTurnover());row.getCell(4).setCellValue(businessData.getOrderCompletionRate());row.getCell(6).setCellValue(businessData.getNewUsers());//获得第五行row=sheet1.getRow(4);row.getCell(2).setCellValue(businessData.getValidOrderCount());row.getCell(4).setCellValue(businessData.getUnitPrice());//填充明细数据for (int i=0;i<30;i++){LocalDate date=dateBegin.plusDays(1);//查询某一天的数据workspaceService.getBusinessData(LocalDateTime.of(dateBegin,LocalTime.MIN),LocalDateTime.of(dateBegin,LocalTime.MAX));//获取某一行row = sheet1.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(5).setCellValue(businessData.getNewUsers());}//通过输出流将excel下载到客户浏览器ServletOutputStream outputStream = response.getOutputStream();excel.write(outputStream);//关闭资源outputStream.close();excel.close();} catch (IOException e) {e.printStackTrace();}//将查询到的数据写入到Excel文件中}

实现效果
备注:并不是下载了5个(是我之前测试用的提前下载了4个)
在这里插入图片描述

这篇关于《苍穹外卖》知识梳理P11-Apache POI导出报表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723273

相关文章

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事