《苍穹外卖》知识梳理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 Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识