Easy-excel操作Excel 待修改
1. EasyExcel 简介EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 工具。在处理大数据量的 Excel 文件时它具有占用内存少、性能高的特点并且使用简单通过注解和少量的代码就能完成 Excel 文件的读写操作。2. EasyExcel 简单语法及使用2.1 添加依赖如果使用 Maven 项目在pom.xml中添加以下依赖dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.1.1/version/dependency2.2 写 Excel 示例定义 Excel 数据实体类importcom.alibaba.excel.annotation.ExcelProperty;publicclassDemoData{ExcelProperty(订单编号)privateStringorderNo;ExcelProperty(销售金额)privateDoublesalesAmount;// 构造函数、getter 和 setter 方法publicDemoData(StringorderNo,DoublesalesAmount){this.orderNoorderNo;this.salesAmountsalesAmount;}publicStringgetOrderNo(){returnorderNo;}publicvoidsetOrderNo(StringorderNo){this.orderNoorderNo;}publicDoublegetSalesAmount(){returnsalesAmount;}publicvoidsetSalesAmount(DoublesalesAmount){this.salesAmountsalesAmount;}}写入 Excel 文件importcom.alibaba.excel.EasyExcel;importjava.util.ArrayList;importjava.util.List;publicclassWriteExcelExample{publicstaticvoidmain(String[]args){StringfileNamesales_report.xlsx;ListDemoDatadataListnewArrayList();dataList.add(newDemoData(001,1000.0));dataList.add(newDemoData(002,2000.0));EasyExcel.write(fileName,DemoData.class).sheet(销售报表).doWrite(dataList);}}2.3 读 Excel 示例定义监听器类importcom.alibaba.excel.context.AnalysisContext;importcom.alibaba.excel.event.AnalysisEventListener;importjava.util.ArrayList;importjava.util.List;publicclassDemoDataListenerextendsAnalysisEventListenerDemoData{privateListDemoDatadataListnewArrayList();Overridepublicvoidinvoke(DemoDatadata,AnalysisContextcontext){dataList.add(data);}OverridepublicvoiddoAfterAllAnalysed(AnalysisContextcontext){// 数据解析完成后的操作System.out.println(数据解析完成共 dataList.size() 条记录);}publicListDemoDatagetDataList(){returndataList;}}读取 Excel 文件importcom.alibaba.excel.EasyExcel;publicclassReadExcelExample{publicstaticvoidmain(String[]args){StringfileNamesales_report.xlsx;DemoDataListenerlistenernewDemoDataListener();EasyExcel.read(fileName,DemoData.class,listener).sheet().doRead();System.out.println(listener.getDataList());}}3. 从数据库中取数形成电商销售资金报表示例3.1 数据库连接和数据查询假设使用 MySQL 数据库使用 JDBC 进行数据查询importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.List;publicclassDatabaseUtils{privatestaticfinalStringURLjdbc:mysql://localhost:3306/ecommerce;privatestaticfinalStringUSERroot;privatestaticfinalStringPASSWORDpassword;publicstaticListDemoDataquerySalesData(){ListDemoDatadataListnewArrayList();try(ConnectionconnDriverManager.getConnection(URL,USER,PASSWORD);Statementstmtconn.createStatement();ResultSetrsstmt.executeQuery(SELECT order_no, sales_amount FROM sales_orders)){while(rs.next()){StringorderNors.getString(order_no);doublesalesAmountrs.getDouble(sales_amount);dataList.add(newDemoData(orderNo,salesAmount));}}catch(Exceptione){e.printStackTrace();}returndataList;}}3.2 生成电商销售资金报表一个 sheet 带有多个报表importcom.alibaba.excel.EasyExcel;importcom.alibaba.excel.write.metadata.WriteSheet;importjava.util.List;publicclassEcommerceSalesReportGenerator{publicstaticvoidmain(String[]args){StringfileNameecommerce_sales_report.xlsx;// 从数据库中查询数据ListDemoDatasalesDataDatabaseUtils.querySalesData();// 创建 Excel 写入对象varexcelWriterEasyExcel.write(fileName).build();// 创建 sheetWriteSheetwriteSheetEasyExcel.writerSheet(销售资金报表).build();// 第一个报表销售订单报表excelWriter.write(salesData,writeSheet);// 模拟第二个报表数据这里简单重复使用 salesData实际可根据需求查询不同数据excelWriter.write(salesData,writeSheet);// 关闭写入器excelWriter.finish();}}4. 报表格式设置如果需要设置报表格式如表头样式、数据样式等可以使用 EasyExcel 提供的样式设置功能。以下是一个简单的表头样式设置示例importcom.alibaba.excel.EasyExcel;importcom.alibaba.excel.write.metadata.WriteSheet;importcom.alibaba.excel.write.metadata.style.WriteCellStyle;importcom.alibaba.excel.write.metadata.style.WriteFont;importcom.alibaba.excel.write.style.HorizontalCellStyleStrategy;importorg.apache.poi.ss.usermodel.HorizontalAlignment;importjava.util.List;publicclassFormattedReportGenerator{publicstaticvoidmain(String[]args){StringfileNameformatted_report.xlsx;ListDemoDatasalesDataDatabaseUtils.querySalesData();// 表头样式WriteCellStyleheadWriteCellStylenewWriteCellStyle();WriteFontheadWriteFontnewWriteFont();headWriteFont.setFontHeightInPoints((short)12);headWriteCellStyle.setWriteFont(headWriteFont);headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 内容样式WriteCellStylecontentWriteCellStylenewWriteCellStyle();contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 样式策略HorizontalCellStyleStrategyhorizontalCellStyleStrategynewHorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle);// 创建 Excel 写入对象并应用样式策略varexcelWriterEasyExcel.write(fileName,DemoData.class).registerWriteHandler(horizontalCellStyleStrategy).build();WriteSheetwriteSheetEasyExcel.writerSheet(销售资金报表).build();excelWriter.write(salesData,writeSheet);excelWriter.finish();}}5、代码实现可视化调整样式1. 基本样式设置在 EasyExcel 里能够运用WriteCellStyle和WriteFont类来设置单元格的样式像字体、颜色、对齐方式等。以下是一个完整示例展示如何设置表头和内容的样式importcom.alibaba.excel.EasyExcel;importcom.alibaba.excel.write.metadata.WriteSheet;importcom.alibaba.excel.write.metadata.style.WriteCellStyle;importcom.alibaba.excel.write.metadata.style.WriteFont;importcom.alibaba.excel.write.style.HorizontalCellStyleStrategy;importorg.apache.poi.ss.usermodel.*;importjava.util.ArrayList;importjava.util.List;// 定义 Excel 数据实体类classDemoData{com.alibaba.excel.annotation.ExcelProperty(订单编号)privateStringorderNo;com.alibaba.excel.annotation.ExcelProperty(销售金额)privateDoublesalesAmount;publicDemoData(StringorderNo,DoublesalesAmount){this.orderNoorderNo;this.salesAmountsalesAmount;}publicStringgetOrderNo(){returnorderNo;}publicvoidsetOrderNo(StringorderNo){this.orderNoorderNo;}publicDoublegetSalesAmount(){returnsalesAmount;}publicvoidsetSalesAmount(DoublesalesAmount){this.salesAmountsalesAmount;}}publicclassExcelStyleExample{publicstaticvoidmain(String[]args){StringfileNamestyled_report.xlsx;ListDemoDatadataListnewArrayList();dataList.add(newDemoData(001,1000.0));dataList.add(newDemoData(002,2000.0));// 表头样式WriteCellStyleheadWriteCellStylenewWriteCellStyle();WriteFontheadWriteFontnewWriteFont();headWriteFont.setFontHeightInPoints((short)14);// 设置表头字体大小headWriteFont.setBold(true);// 表头字体加粗headWriteCellStyle.setWriteFont(headWriteFont);headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());// 设置表头背景颜色headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 表头内容居中对齐// 内容样式WriteCellStylecontentWriteCellStylenewWriteCellStyle();WriteFontcontentWriteFontnewWriteFont();contentWriteFont.setFontHeightInPoints((short)12);// 设置内容字体大小contentWriteCellStyle.setWriteFont(contentWriteFont);contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 内容居中对齐contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 内容垂直居中对齐contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);// 设置底部边框contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);// 设置左边框contentWriteCellStyle.setBorderRight(BorderStyle.THIN);// 设置右边框contentWriteCellStyle.setBorderTop(BorderStyle.THIN);// 设置顶部边框// 样式策略HorizontalCellStyleStrategyhorizontalCellStyleStrategynewHorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle);// 写入 Excel 文件并应用样式策略EasyExcel.write(fileName,DemoData.class).registerWriteHandler(horizontalCellStyleStrategy).sheet(销售报表).doWrite(dataList);}}2. 自定义样式处理器要是有更复杂的样式需求还能自定义样式处理器。下面是一个自定义样式处理器的示例它会依据数据内容来设置不同的样式importcom.alibaba.excel.EasyExcel;importcom.alibaba.excel.write.handler.CellWriteHandler;importcom.alibaba.excel.write.metadata.holder.WriteSheetHolder;importcom.alibaba.excel.write.metadata.holder.WriteTableHolder;importcom.alibaba.excel.write.metadata.style.WriteCellStyle;importcom.alibaba.excel.write.metadata.style.WriteFont;importorg.apache.poi.ss.usermodel.*;importjava.util.ArrayList;importjava.util.List;classCustomCellStyleHandlerimplementsCellWriteHandler{OverridepublicvoidafterCellDispose(WriteSheetHolderwriteSheetHolder,WriteTableHolderwriteTableHolder,ListCellDatacellDataList,Cellcell,Headhead,IntegerrelativeRowIndex,BooleanisHead){if(!isHead){WriteCellStylestylenewWriteCellStyle();WriteFontfontnewWriteFont();if(cell.getColumnIndex()1){// 假设第二列是销售金额列doubleamountDouble.parseDouble(cell.getStringCellValue());if(amount1500){font.setColor(IndexedColors.RED.getIndex());// 销售金额大于 1500 显示红色字体}}style.setWriteFont(font);CellStylecellStylewriteSheetHolder.getSheet().getWorkbook().createCellStyle();cellStyle.cloneStyleFrom(style.build());cell.setCellStyle(cellStyle);}}}publicclassCustomStyleExample{publicstaticvoidmain(String[]args){StringfileNamecustom_styled_report.xlsx;ListDemoDatadataListnewArrayList();dataList.add(newDemoData(001,1000.0));dataList.add(newDemoData(002,2000.0));EasyExcel.write(fileName,DemoData.class).registerWriteHandler(newCustomCellStyleHandler()).sheet(销售报表).doWrite(dataList);}}借助工具进行可视化调整在生成 Excel 文件之后你可以使用 Excel 软件如 Microsoft Excel 或 WPS 表格打开文件然后通过软件的界面来可视化地调整样式具体操作步骤如下打开文件用 Excel 软件打开 EasyExcel 生成的文件。选择单元格或区域选中你想要调整样式的单元格或者单元格区域。调整样式利用 Excel 软件提供的功能来调整样式例如字体设置在“开始”菜单中选择字体、字号、颜色、加粗、倾斜等。对齐方式通过“对齐方式”组设置水平对齐和垂直对齐方式。边框和底纹使用“边框”和“填充颜色”按钮来设置单元格的边框和背景颜色。数据格式在“数字”组中选择合适的数据格式如货币、百分比等。

相关新闻

如何用1小时完成LLM审计报告?——基于ISO/IEC 23053与NIST AI RMF的自动化审计流水线

如何用1小时完成LLM审计报告?——基于ISO/IEC 23053与NIST AI RMF的自动化审计流水线

更多请点击: https://codechina.net 第一章:AI模型审计方法论的演进与范式迁移 早期AI模型审计聚焦于静态合规检查,如参数合法性验证与输入输出边界测试,依赖规则引擎与预定义断言。随着深度学习模型复杂度跃升、部署场景泛化&am…

2026/10/2 7:39:12 阅读更多 →
终极宽屏适配方案:让经典《植物大战僵尸》完美适配现代显示器

终极宽屏适配方案:让经典《植物大战僵尸》完美适配现代显示器

终极宽屏适配方案:让经典《植物大战僵尸》完美适配现代显示器 【免费下载链接】PvZWidescreen Widescreen mod for Plants vs Zombies 项目地址: https://gitcode.com/gh_mirrors/pv/PvZWidescreen 还在为《植物大战僵尸》在宽屏显示器上的黑边烦恼吗&#x…

2026/10/13 19:42:12 阅读更多 →
终极指南:如何用VinXiangQi快速实现中国象棋AI自动连线

终极指南:如何用VinXiangQi快速实现中国象棋AI自动连线

终极指南:如何用VinXiangQi快速实现中国象棋AI自动连线 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi VinXiangQi是一款基于YOLOv5深度学习的…

2026/9/25 18:13:44 阅读更多 →

最新新闻

Android Kitchen 实战:从解包到打包的 ROM 定制全流程

Android Kitchen 实战:从解包到打包的 ROM 定制全流程

简介:面向Android发烧友与ROM定制初学者的Android Kitchen V0.223定制工具包,由光头佬开发,用批处理脚本把解压、修改、打包、签名、刷写等繁琐步骤集成到菜单式操作,适合刷机玩家、ROM移植者和入门开发者。版本内置大量机型配置与…

2026/10/14 9:10:51 阅读更多 →
k8s v1.23.4 ARM离线包部署指南:从镜像导入到集群初始化

k8s v1.23.4 ARM离线包部署指南:从镜像导入到集群初始化

简介:面向银河麒麟Server-V10与ARM架构服务器的Kubernetes v1.23.4完整离线部署资源,适用于无法连接外网或安全要求较高的机房、内网及国产化替代等场景,可帮助运维与研发人员完成容器集群的快速准备与部署。压缩包共118个文件,整…

2026/10/14 9:10:51 阅读更多 →
肺类器官技术:构建与应用全解析

肺类器官技术:构建与应用全解析

1. 肺类器官技术:从基础研究到转化医学的革命性工具 作为一名长期从事干细胞与类器官研究的科研人员,我见证了肺类器官技术如何从实验室的探索性研究逐步发展成为转化医学的重要平台。肺类器官之所以能引起如此广泛的关注,关键在于它完美解决…

2026/10/14 9:10:51 阅读更多 →
Unity光照模型:从Phong到PBR的演进与优化

Unity光照模型:从Phong到PBR的演进与优化

1. 光照模型概述:从经验到物理的进化之路在Unity引擎中,光照系统的发展经历了从经验模型(Emperical Models)到物理模型(Physically Based Models)的演变过程。早期游戏开发中,我们主要依赖Phong和Blinn-Phong这类经验模型,它们通过…

2026/10/14 9:10:51 阅读更多 →
物联网设备管理实战:批量 OTA、远程配置与设备生命周期

物联网设备管理实战:批量 OTA、远程配置与设备生命周期

IoT 系列第 6 篇。第 4 篇讲了设备影子,第 5 篇讲了给"穷设备"用的 CoAP/LwM2M。这一篇把视角从"一台设备"拉到"一万台设备":当你有 1000 台设备散在全国,发现一个 bug,总不能一台台寄回来刷吧&…

2026/10/14 9:10:51 阅读更多 →
SpringBoot+Vue构建高效办公管理系统实战

SpringBoot+Vue构建高效办公管理系统实战

1. 项目背景与核心价值 办公管理系统作为企业数字化转型的基础设施,正在从传统的C/S架构向B/S架构快速迁移。这个基于SpringBootVue的前后端分离项目,完美契合了现代企业对高效协同、移动办公和低维护成本的核心需求。 我去年为一家中型科技公司实施类似…

2026/10/14 9:09:51 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →