EasyExcel动态表头多sheet导出,单元格操作样式,自动修改单元格格式

EasyExcel动态表头多sheet导出,单元格操作样式,自动修改单元格格式

说明

EasyExcel是一款开源的Java库,用于读取、写入和操作Excel文件。它是阿里巴巴集团开发的一款高效、功能丰富且易于使用的Excel操作工具。

EasyExcel提供了简洁的API,使得读写Excel文件变得非常方便,尤其适用于大量数据的导入导出操作。以下是EasyExcel的一些主要特性:

读取和写入Excel文件:EasyExcel提供了简单易用的API用于读取和写入Excel文件。你可以通过指定模型类来读取Excel文件的数据,并将数据写入到Excel文件中。

高性能:EasyExcel采用了基于事件驱动的模式,在读取和写入时能够更高效地处理大量数据。它能够以极快的速度读取和写入Excel文件,提高了数据处理的效率。

支持大数据量:EasyExcel使用内存友好的方式进行数据读取和写入,可以处理大量数据而不会导致内存溢出的问题。

导入导出灵活:EasyExcel支持导入和导出多种格式的Excel文件,包括xls和xlsx格式。你可以导入Excel文件的数据到Java对象中,并将Java对象的数据导出为Excel文件。

数据转换:EasyExcel提供了丰富的数据转换功能,可以方便地进行数据格式转换、数据映射、日期格式化等操作。

监听器支持:EasyExcel提供了监听器功能,你可以自定义监听器来处理Excel读取和写入的过程,实现一些自定义的业务逻辑。

多线程支持:EasyExcel支持多线程并发读写Excel,提高数据处理的速度。

自定义处理器

package com.csair.demo.util;import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import org.thymeleaf.util.StringUtils;import java.util.List;public class CustomCellWriter implements CellWriteHandler {@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {Sheet sheet = writeSheetHolder.getSheet();Workbook workbook = sheet.getWorkbook();Font font = workbook.createFont();font.setColor(IndexedColors.RED.getIndex());CellStyle cellStyle = workbook.createCellStyle();cellStyle.setFont(font);//获取表头总共有多少列short lastCellNum = writeSheetHolder.getSheet().getRow(0).getLastCellNum();//过滤表头if (!aBoolean) {//获取当前行数int rowNum = integer + 1;//每一个单元格都会执行afterCellDispose此方法,每执行一次单元格数据+1,此处是校验当前行的全部单元格加载完毕if (writeSheetHolder.getSheet().getRow(rowNum).getLastCellNum() == lastCellNum) {//加载完毕执行业务代码(可按照自己实际业务进行修改)for (int i = 0; i < lastCellNum; i++) {if (i % 2 != 0) {//指定单元格修改样式writeSheetHolder.getSheet().getRow(rowNum).getCell(i).setCellStyle(cellStyle);}//录入的数据全部是String类型,直接获取就行,如果有不同类型数据,需要添加类型判断String stringCellValue = writeSheetHolder.getSheet().getRow(rowNum).getCell(i).getStringCellValue();//setCellValue会根据数据自动修改单元格格式if (StringUtils.isEmpty(stringCellValue)) {writeSheetHolder.getSheet().getRow(rowNum).getCell(i).setCellValue("");} else {writeSheetHolder.getSheet().getRow(rowNum).getCell(i).setCellValue(Double.parseDouble(stringCellValue));}}}}}
}

实现类

@GetMapping("/export")public void export(HttpServletResponse response) {try {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode("文件名", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");List<List<String>> head1 = new ArrayList<>();List<List<String>> data1 = new ArrayList<>();List<List<String>> head2 = new ArrayList<>();List<List<String>> data2 = new ArrayList<>();ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new CustomCellWriter()).build();excelWriter.write(data1, EasyExcel.writerSheet("sheet1").head(head1).build());excelWriter.write(data2, EasyExcel.writerSheet("sheet2").head(head2).build());//关闭流excelWriter.finish();} catch (Exception e) {e.printStackTrace();}}

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

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

相关文章

springboot个人证书管理系统-计算机毕业设计源码16679

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了个人证书管理系统的开发全过程。通过分析个人证书管理系统管理的不足&#xff0c;创建了一个计算机管理个人证书管理系统的方案。文章介绍了个人证书管理系统的系…

豪掷5400亿,SK海力士加码部署AI赛道

KlipC报道&#xff1a;最新数据显示&#xff0c;韩国6月半导体出口额达到134亿美元&#xff08;约合人民币973亿元&#xff09;&#xff0c;同比增长50.9%。 KlipC分析师表示&#xff0c;这一数据超出市场预期&#xff0c;对于全球半导体产业链来说&#xff0c;是一则利好的消…

Redis 典型应用——缓存(缓存预热,穿透,雪崩,击穿)

一、缓存 缓存是计算机中一个很经典的概念&#xff0c;核心思路是把一些常用的数据放到访问速度更快的地方&#xff0c;方便随时读取&#xff1b; 但对于计算机硬件来说&#xff0c;往往访问速度越快的设备&#xff0c;成本越高&#xff0c;存储空间越小&#xff0c;缓存是更…

2024年【四川省安全员A证】试题及解析及四川省安全员A证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员A证试题及解析根据新四川省安全员A证考试大纲要求&#xff0c;安全生产模拟考试一点通将四川省安全员A证模拟考试试题进行汇编&#xff0c;组成一套四川省安全员A证全真模拟考试试题&#xff0c;学员可通…

前后端数据交互流程

一、前言 用户在浏览器访问一个网站时&#xff0c;会有前后端数据交互的过程&#xff0c;前后端数据交互也有几种的情况&#xff0c;一下就简单的来说明一下 二、原理 介绍前后端交互前先来了解一下浏览器的功能&#xff0c;浏览器通过渲染引擎和 JavaScript 引擎协同工作&am…

Java 判断两个日期 相差几天

// 入参 为 Date 例如 &#xff1a;Date1 datenew Date();long dayCount (date1.getTime() - date1.getTime()) / 86400000;

消息中间件常用命令

一、Nginx篇 1.1 启动Nginx start nginx 1.2 停止Nginx nginx.exe -s stop 1.3 清理缓存 nginx.exe -s reload 1.4 重新打开日志文件 nginx.exe -s reopen 1.5 查看Nginx版本 nginx -v 1.6 彻底停用Nginx taskkill /f /t /im nginx.exe

简明万年历编制(C语言)

简明万年历编制&#xff08;C语言 &#xff09; 编制万年历的要素&#xff1a; 农历公历对照&#xff0c;显示星期&#xff0c;农历干支年&#xff0c;当年生肖&#xff0c;国定节假日&#xff0c;寒天九九&#xff0c;暑日三伏&#xff0c;入梅出梅&#xff0c;节气时间&#…

回调函数在异步编程中的作用与实现方式

回调函数在异步编程中的作用与实现方式 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在计算机编程中&#xff0c;回调函数是指通过将函数作为参数传递给其他函数&#xff0c;使得该函数在特定事件…

使用 HTTPS 已成为网站的标配了

网站使用HTTPS的原因 背景&#xff1a;十年前&#xff0c;HTTPS并不普遍&#xff0c;但随着网络安全意识的提高&#xff0c;现在已成为网站标配。 网站升级到HTTPS的动机 安全问题&#xff1a;HTTP缺乏安全机制&#xff0c;易被窃取和篡改数据。例如&#xff0c;电信运营商劫…

剑神诀_单机架设_无需虚拟机_小白专用

前言 今天给大家带来一款单机游戏的架设&#xff1a;剑神诀&#xff0c;一键端 无需虚拟机 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 剑神诀 搭建教程 此游戏架设不需要安装虚拟机&#xff0c;…

单模光纤(SMF)市场规模不断增长 非色散位移单模光纤为其代表产品

单模光纤&#xff08;SMF&#xff09;市场规模不断增长 非色散位移单模光纤为其代表产品 单模光纤&#xff08;SMF&#xff09;指芯径为8-10微米&#xff0c;用于单一传输模式的光纤。单模光纤具有频带宽、芯径细、适合长距离传输、传输耗损低、抗干扰能力强、传输速度快等优势…

【java12】java12新特性之switch表达式

Java12引入了对switch语句的增强&#xff0c;允许在switch语句中使用表达式来代替传统的语句列表。这样可以使得代码更加简洁和易读。 switch表达式也是作为预览语言功能的第一个语言改动被引入新版Java中来的&#xff0c;这是一种引入新特性的测试版的方法。通过这种方式&…

MySQL实训项目——餐饮点餐系统

项目简介&#xff1a;餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。通过该系统&#xff0c;餐厅能够展示其菜单&#xff0c;顾客可以浏览菜品&#xff0c;并将其加入购物车或直接下单。系统还提供了订单管理功能&#xff0c;方便餐厅跟踪和处理顾客的订单。 1. …

IT启航:高考后的IT学习之旅与未来规划

随着高考分数的揭晓&#xff0c;你们即将迎来人生新的篇章。对于有志于踏入IT领域的你们来说&#xff0c;这个假期是开启探索之旅的绝佳时机。作为一位已经在社会大学摸爬滚打多年的牛马来说&#xff0c;我想从自己的经历和观察出发&#xff0c;给你们提供一些实质性的建议和学…

LangChain+ChatGLM基本原理及私有化部署

一、LangChain 1.作用&#xff1a;用于提升大型语言模型&#xff08;LLMs&#xff09;功能的框架&#xff0c;能够让大型语言模型结合外部的计算和数据源&#xff0c;并根据信息执行指定操作。 结合LLM大模型外部数据等&#xff0c;外部工具及数据等实现特定文档问答、聊天机器…

【计算机网络】传输层(作业)

1、OSI参考模型中&#xff0c;提供端到端的透明数据传输服务、差错控制和流量控制的层是&#xff08;C&#xff09;。 A. 物理层B. 网络层C. 运输层D. 会话层 2、运输层为&#xff08;B&#xff09;之间提供逻辑通信。 A. 主机B. 进程C. 路由器D. 操作系统 3、运输层面向连接…

开发个人OpenUI--2 环境搭建

开发个人OpenUI–2 环境搭建 2.1 环境要求 Golang 1.22 Etcd Docker Redis Mysql 2.2Docker本地开发环境搭建 这里使用 Docker Compose 来编排管理我们的容器&#xff0c;docker-compose.yaml&#xff1a; version: 3.8services:mysql:image: mysql:8.0.18container_n…

RT-Thread Studio与CubeMX联合编程之rtthread stm32h743的使用(十一)spi设备SFUD驱动的使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…