apache poi导出excel

简介

在这里插入图片描述

常见的使用场景

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

入门

导入maven依赖

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

简单了解 基本元素

  • 整个excel文件
  • excel分为多个sheet
  • 一个sheet分为

代码(写excel的示例)

@Slf4j
public class ApachePoiTest {// 测试写入excel@Testpublic void testWriteExcel() {//  创建文件夹File directory = new File("src/testFile");if (!directory.exists()) {boolean mkdir = directory.mkdirs();if (!mkdir) {log.error("创建文件夹失败");}}try (// 1. 创建工作簿 excelWorkbook workbook = new HSSFWorkbook();// 创建输出流FileOutputStream fileOutputStream = new FileOutputStream("src/testFile/user.xlsx");) {// 2. 创建工作表 sheetSheet sheet = workbook.createSheet("用户信息");// 3. 创建行 0表示第一行Row row = sheet.createRow(0);// 4. 创建单元格 0表示第一列Cell cell = row.createCell(0);// 5. 设置单元格内容 0行0列的单元格内容为用户名cell.setCellValue("用户名");// 6. 输出到文件workbook.write(fileOutputStream);} catch (Exception e) {log.error("写入excel失败", e);}}}

代码(读excel的示例)

    // 测试读取excel@Testpublic void testReadExcel() {try (FileInputStream fileInputStream =  new FileInputStream("src/testFile/user.xlsx");// 1. 创建工作簿 excelWorkbook workbook = new HSSFWorkbook(fileInputStream);) {// 2. 读取文件workbook.getSheetAt(0);// 3. 获取工作表// Sheet sheet = workbook.getSheetAt(0);Sheet sheet = workbook.getSheet("用户信息");// 4. 获取文件最后一行的行号int lastRowNum = sheet.getLastRowNum();// 5. 获取行for (int i = 0; i <= lastRowNum; i++) {// 6. 获取此行的最后一列的列号Row row = sheet.getRow(i);short lastCellNum = row.getLastCellNum();for (int j = 0; j < lastCellNum; j++) {// 7. 获取单元格Cell cell = row.getCell(j);// 8. 判断单元格类型 获取单元格内容 根据单元格类型获取内容switch (cell.getCellTypeEnum()) {case STRING:log.info(cell.getStringCellValue());break;case NUMERIC:log.info(String.valueOf(cell.getNumericCellValue()));break;default:break;}}}} catch (Exception e) {log.error("读取excel失败", e);}}

需求分析

在这里插入图片描述

实现步骤

在这里插入图片描述

准备模板

在这里插入图片描述
在这里插入图片描述

代码

controller

    // 导出数据 需要response的输出流@GetMapping("/export")@ApiOperation("导出数据")public void export(HttpServletRequest request, HttpServletResponse response) {// 1.获取数据// 2.导出数据reportService.exportBusinessData(response);}

service

    /*** 导出营业数据* @param response 响应,用于获取输出流*/@Overridepublic void exportBusinessData(HttpServletResponse response) {// 1.查询数据库,获取数据 (概览数据和明细数据)LocalDate dateBegin = LocalDate.now().minusDays(30);LocalDate dateEnd = LocalDate.now().minusDays(1);LocalDateTime timeBegin = LocalDateTime.of(dateBegin, LocalTime.MIN);LocalDateTime timeEnd = LocalDateTime.of(dateEnd, LocalTime.MAX);BusinessDataVO businessDataVO = workspaceService.getBusinessData(timeBegin, timeEnd);// 2.通过poi将数据写入到excel中try(// 获取模板文件InputStream inputStream = this.getClass().getResourceAsStream("/template/运营数据报表模板.xlsx");// 读取模板文件// 创建工作簿XSSFWorkbook excel = new XSSFWorkbook(inputStream);// 获取输出流ServletOutputStream outputStream = response.getOutputStream();){//填充数据XSSFSheet sheet = excel.getSheet("Sheet1");// 第2行第2列 日期sheet.getRow(1).getCell(1).setCellValue("时间" + dateBegin + "至" + dateEnd);// 第4行XSSFRow row = sheet.getRow(3);// 第4行 第3列 营业额row.getCell(2).setCellValue(businessDataVO.getTurnover().doubleValue());// 第4行 5列 完成率row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());// 第4行 7列 新增用户row.getCell(6).setCellValue(businessDataVO.getNewUsers());// 第5行row = sheet.getRow(4);// 第5行 3列 有效订单数row.getCell(2).setCellValue(businessDataVO.getValidOrderCount());// 第5行 5列 平均客单价row.getCell(4).setCellValue(businessDataVO.getUnitPrice().doubleValue());// 填充明细数据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().doubleValue());// 有效订单数row.getCell(3).setCellValue(businessData.getValidOrderCount());// 完成率row.getCell(4).setCellValue(businessData.getOrderCompletionRate());// 新增用户row.getCell(5).setCellValue(businessData.getNewUsers());}// 3.通过response将excel文件输出到浏览器excel.write(outputStream);}catch (Exception e){log.error("导出营业数据失败", e);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/459166.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉:9点标定的原理与实现

一、什么是标定 标定就是将机器视觉处理得到的像素坐标转换成实际项目中使用到的毫米坐标。简单说即使看看实际单位距离内有几个像素&#xff0c;如下图所示&#xff0c;10mm的距离内有222个像素&#xff0c;那像素坐标和实际的毫米坐标就有个比例关系了。 二、九点标定 9点标…

【万能软件篇】03-Batchplot_setup_3.5.6(CAD批量打印插件)

批量打印插件&#xff08;Batchplot&#xff09;简介 Batchplot是一个专门针对AutoCAD2000以上版本设计的单DWG多图纸的批量生成布局、批量打印、批量分图工具。自行判定的图框位置与尺寸&#xff0c;根据当前的打印机设置&#xff0c;自动调整打印的方式&#xff0c;实现批量生…

2024 AFS-46 电子数据存在性鉴定(移动终端)(2024能力验证)

一、委托事项 1.给出检材手机的MEID。 2.给出检材手机在2024年7月3日上午连接过的设备名称。 3.给出检材手机中kimi应用最近一次被中断回答的问题内容。 4.给出检材手机中安装过的即时通讯应用的包名&#xff08;不包含虚拟机中的应用&#xff09;。 5.检材手机中安装有几…

C#与C++交互开发系列(十一):委托和函数指针传递

前言 在C#与C的互操作中&#xff0c;委托&#xff08;delegate&#xff09;和函数指针的传递是一个复杂但非常强大的功能。这可以实现从C回调C#方法&#xff0c;或者在C#中调用C函数指针的能力。无论是跨语言调用回调函数&#xff0c;还是在多线程、异步任务中使用委托&#x…

《数字图像处理基础》学习03-图像的采样

在之前的学习中我已经知道了图像的分类&#xff1a;物理图像和虚拟图像。《数字图像处理基础》学习01-数字图像处理的相关基础知识_图像处理 数字-CSDN博客 目录 一&#xff0c;连续图像和离散图像的概念 二&#xff0c;图像的采样 1&#xff0c; 不同采样频率采样同一张图…

Linux系统基础-多线程超详细讲解(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux系统基础-多线程超详细讲解(1) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

QGIS提取面的顶点坐标到属性表

相关参考&#xff1a;QGIS中提取面的中心坐标到属性表-CSDN博客 polygon_layer QgsProject.instance().mapLayersByName("Polygon")[0]polygon_layer.startEditing() polygon_layer.dataProvider().addAttributes([QgsField("coors", QVariant.String, le…

面向对象编程中类与类之间的关系(二)

目录 1.引言 2.泛化&#xff08;继承&#xff09;关系 3.实现关系 4.聚合关系 5.组合关系 6.依赖关系 7.关联关系 7.1. 单向关联 7.2. 双向关联 7.3.自关联 8.总结 1.引言 在面向对象设计模式中&#xff0c;类与类之间主要有6种关系&#xff0c;他们分别是&#xff…

Android Studio安装完成后,下载gradle-7.4-bin.zip出现连接超时

文章目录 问题原因&#xff1a;因为下载镜像是谷歌&#xff0c;属于外网&#xff0c;不好正常连接&#xff0c;下载依赖。解决方法&#xff1a;找到gradle-wrapper.properties文件&#xff0c;修改镜像&#xff0c;如下图&#xff0c;然后再单击try again重新下载。 问题原因&a…

[论文阅读]Constrained Decision Transformer for Offline Safe Reinforcement Learning

Constrained Decision Transformer for Offline Safe Reinforcement Learning Proceedings of the 40th International Conference on Machine Learning (ICML), July 23-29, 2023 https://arxiv.org/abs/2302.07351 泛读只需要了解其核心思想即可。 安全强化学习(Safe Rei…

解决 IntelliJ IDEA 中使用 Lombok 编译报错的几种方法

目录 引言 常见的 Lombok 编译错误 解决方法 方法一&#xff1a;确保最新版本 Lombok 库已添加到项目依赖 方法二&#xff1a;检查 IDEA 的编译器设置 方法三&#xff1a;安装并启用 Lombok 插件 方法四&#xff1a;配置 Lombok 注解处理器 方法五&#xff1a;检查 Lom…

基于熵权法的TOPSIS模型

基于熵权法的TOPSIS模型 1. 简介 数学建模可以结合 熵权法 和 T O P S I S TOPSIS TOPSIS 法各自的特点&#xff0c;进行评价&#xff0c;这种组合模型的使用在数学建模比赛中使用的非常多。 在 2023 美赛 O 奖中就有使用该方法的&#xff0c;往年国赛国奖中也有 2. 熵权法介…

js基础入门篇

1.输出语句&#xff0c;内部样式&#xff0c;外部样式&#xff0c;数组定义 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

EV代码签名证书是什么?作用有哪些?如何获取呢?

我们都知道&#xff0c;黑客们往往会通过篡改软件代码来进行各种恶意行为&#xff0c;例如加入病毒、木马、恶意代码等&#xff0c;为了确保软件代码的完整性和可信任性&#xff0c;代码签名证书诞生了。代码签名证书又分为普通代码签名证书和EV代码签名证书&#xff0c;今天我…

python原地去重实战案例笔记

数据样例&#xff1a;&#x1f447; 最终想要的结果&#xff1a; 一、解决办法 思路&#xff1a;处理逐个元素检查是否已经出现过&#xff0c;重复的元素用空字符串替换。 # 原始数据 data [[数据1, 数据2, 数据3, 数据4, 数据5],[D, A, S, Q, J],[Y, L, D, J, O],[G, X, X,…

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而&#xff0c;电脑版的bilibili不能通过手机控制视频翻页和调节音量&#xff0c;这意味着观看视频时需要一直坐在电脑旁边。那么&#xff0c;有没有办法制作一个手机遥控器来控制bilibili电脑版呢&#xff1f; 首先…

如何在macOS开发中给 PKG 签名和公证(productsign+notarytool)

在macOS中&#xff0c;给PKG文件进行签名是一个确保用户能够顺利无警告地安装软件的重要步骤。以下是给PKG签名的详细步骤&#xff1a; 一、准备阶段 获取开发者账号和证书&#xff1a; 首先&#xff0c;需要在苹果开发者网站&#xff08;Apple Developer&#xff09;注册一个…

Linux系统下minio设置SSL证书进行HTTPS远程连接访问

文章目录 1.配置SSL证书使用HTTPS访问2.MINIO SDK 忽略证书验证3.使用受信任的证书 1.配置SSL证书使用HTTPS访问 生成域名对应的SSL证书&#xff0c;下载Apache版本&#xff0c;我目前只发现Apache这个里面有对应的私钥和证书 私钥重命名为private.key证书重命名为public.crt&…

AtCoder ABC376A-D题解

个人觉得 ABC 变得越来越难了/kk/kk/kk 比赛链接:ABC376 Problem A: Code #include <bits/stdc.h> using namespace std; int main(){int N,C;cin>>N>>C;for(int i1;i<N;i)cin>>T[i];int ans0,pre-1e5;for(int i1;i<N;i){if(T[i]-pre>C){…

Java:String类(超详解!)

一.常用方法 &#x1f94f;1.字符串构造 字符串构造有三种方法&#xff1a; &#x1f4cc;注意&#xff1a; 1. String是引用类型&#xff0c;内部并不存储字符串本身 如果String是一个引用那么s1和s3应该指向同一个内容&#xff0c;s1和s2是相等的&#xff0c;应该输出两…