《苍穹外卖》知识梳理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

相关文章

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

Apache服务器IP自动跳转域名的问题及解决方案

《Apache服务器IP自动跳转域名的问题及解决方案》本教程将详细介绍如何通过Apache虚拟主机配置实现这一功能,并解决常见问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录​​问题背景​​解决方案​​方法 1:修改 httpd-vhosts.conf(推荐)​​步骤

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按