news 2026/8/4 20:56:11

Easy-excel操作Excel 待修改

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Easy-excel操作Excel 待修改

1. EasyExcel 简介

EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 工具。在处理大数据量的 Excel 文件时,它具有占用内存少、性能高的特点,并且使用简单,通过注解和少量的代码就能完成 Excel 文件的读写操作。

2. EasyExcel 简单语法及使用

2.1 添加依赖

如果使用 Maven 项目,在pom.xml中添加以下依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>
2.2 写 Excel 示例

定义 Excel 数据实体类:

importcom.alibaba.excel.annotation.ExcelProperty;publicclassDemoData{@ExcelProperty("订单编号")privateStringorderNo;@ExcelProperty("销售金额")privateDoublesalesAmount;// 构造函数、getter 和 setter 方法publicDemoData(StringorderNo,DoublesalesAmount){this.orderNo=orderNo;this.salesAmount=salesAmount;}publicStringgetOrderNo(){returnorderNo;}publicvoidsetOrderNo(StringorderNo){this.orderNo=orderNo;}publicDoublegetSalesAmount(){returnsalesAmount;}publicvoidsetSalesAmount(DoublesalesAmount){this.salesAmount=salesAmount;}}

写入 Excel 文件:

importcom.alibaba.excel.EasyExcel;importjava.util.ArrayList;importjava.util.List;publicclassWriteExcelExample{publicstaticvoidmain(String[]args){StringfileName="sales_report.xlsx";List<DemoData>dataList=newArrayList<>();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;publicclassDemoDataListenerextendsAnalysisEventListener<DemoData>{privateList<DemoData>dataList=newArrayList<>();@Overridepublicvoidinvoke(DemoDatadata,AnalysisContextcontext){dataList.add(data);}@OverridepublicvoiddoAfterAllAnalysed(AnalysisContextcontext){// 数据解析完成后的操作System.out.println("数据解析完成,共 "+dataList.size()+" 条记录");}publicList<DemoData>getDataList(){returndataList;}}

读取 Excel 文件:

importcom.alibaba.excel.EasyExcel;publicclassReadExcelExample{publicstaticvoidmain(String[]args){StringfileName="sales_report.xlsx";DemoDataListenerlistener=newDemoDataListener();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{privatestaticfinalStringURL="jdbc:mysql://localhost:3306/ecommerce";privatestaticfinalStringUSER="root";privatestaticfinalStringPASSWORD="password";publicstaticList<DemoData>querySalesData(){List<DemoData>dataList=newArrayList<>();try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("SELECT order_no, sales_amount FROM sales_orders")){while(rs.next()){StringorderNo=rs.getString("order_no");doublesalesAmount=rs.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){StringfileName="ecommerce_sales_report.xlsx";// 从数据库中查询数据List<DemoData>salesData=DatabaseUtils.querySalesData();// 创建 Excel 写入对象varexcelWriter=EasyExcel.write(fileName).build();// 创建 sheetWriteSheetwriteSheet=EasyExcel.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){StringfileName="formatted_report.xlsx";List<DemoData>salesData=DatabaseUtils.querySalesData();// 表头样式WriteCellStyleheadWriteCellStyle=newWriteCellStyle();WriteFontheadWriteFont=newWriteFont();headWriteFont.setFontHeightInPoints((short)12);headWriteCellStyle.setWriteFont(headWriteFont);headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 内容样式WriteCellStylecontentWriteCellStyle=newWriteCellStyle();contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 样式策略HorizontalCellStyleStrategyhorizontalCellStyleStrategy=newHorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle);// 创建 Excel 写入对象并应用样式策略varexcelWriter=EasyExcel.write(fileName,DemoData.class).registerWriteHandler(horizontalCellStyleStrategy).build();WriteSheetwriteSheet=EasyExcel.writerSheet("销售资金报表").build();excelWriter.write(salesData,writeSheet);excelWriter.finish();}}

5、代码实现可视化调整样式

1. 基本样式设置

在 EasyExcel 里,能够运用WriteCellStyleWriteFont类来设置单元格的样式,像字体、颜色、对齐方式等。以下是一个完整示例,展示如何设置表头和内容的样式:

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.orderNo=orderNo;this.salesAmount=salesAmount;}publicStringgetOrderNo(){returnorderNo;}publicvoidsetOrderNo(StringorderNo){this.orderNo=orderNo;}publicDoublegetSalesAmount(){returnsalesAmount;}publicvoidsetSalesAmount(DoublesalesAmount){this.salesAmount=salesAmount;}}publicclassExcelStyleExample{publicstaticvoidmain(String[]args){StringfileName="styled_report.xlsx";List<DemoData>dataList=newArrayList<>();dataList.add(newDemoData("001",1000.0));dataList.add(newDemoData("002",2000.0));// 表头样式WriteCellStyleheadWriteCellStyle=newWriteCellStyle();WriteFontheadWriteFont=newWriteFont();headWriteFont.setFontHeightInPoints((short)14);// 设置表头字体大小headWriteFont.setBold(true);// 表头字体加粗headWriteCellStyle.setWriteFont(headWriteFont);headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());// 设置表头背景颜色headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 表头内容居中对齐// 内容样式WriteCellStylecontentWriteCellStyle=newWriteCellStyle();WriteFontcontentWriteFont=newWriteFont();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);// 设置顶部边框// 样式策略HorizontalCellStyleStrategyhorizontalCellStyleStrategy=newHorizontalCellStyleStrategy(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,List<CellData>cellDataList,Cellcell,Headhead,IntegerrelativeRowIndex,BooleanisHead){if(!isHead){WriteCellStylestyle=newWriteCellStyle();WriteFontfont=newWriteFont();if(cell.getColumnIndex()==1){// 假设第二列是销售金额列doubleamount=Double.parseDouble(cell.getStringCellValue());if(amount>1500){font.setColor(IndexedColors.RED.getIndex());// 销售金额大于 1500 显示红色字体}}style.setWriteFont(font);CellStylecellStyle=writeSheetHolder.getSheet().getWorkbook().createCellStyle();cellStyle.cloneStyleFrom(style.build());cell.setCellStyle(cellStyle);}}}publicclassCustomStyleExample{publicstaticvoidmain(String[]args){StringfileName="custom_styled_report.xlsx";List<DemoData>dataList=newArrayList<>();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 表格)打开文件,然后通过软件的界面来可视化地调整样式,具体操作步骤如下:

  1. 打开文件:用 Excel 软件打开 EasyExcel 生成的文件。
  2. 选择单元格或区域:选中你想要调整样式的单元格或者单元格区域。
  3. 调整样式:利用 Excel 软件提供的功能来调整样式,例如:
    • 字体设置:在“开始”菜单中选择字体、字号、颜色、加粗、倾斜等。
    • 对齐方式:通过“对齐方式”组设置水平对齐和垂直对齐方式。
    • 边框和底纹:使用“边框”和“填充颜色”按钮来设置单元格的边框和背景颜色。
    • 数据格式:在“数字”组中选择合适的数据格式,如货币、百分比等。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/4 20:40:38

天心大师:不确定中锚定自我,AI生活的哲学命题

在不确定中锚定自我&#xff1a;现代生活的哲学命题我们正身处一个被不确定性裹挟的时代。在这个时代里&#xff0c;计划赶不上变化&#xff0c;稳定成了奢侈品&#xff0c;我们像风中的落叶&#xff0c;在时代的洪流中飘摇不定。加缪曾说&#xff1a;"真正的哲学问题只有…

作者头像 李华
网站建设 2026/8/4 20:35:05

画埋件图是着重考虑哪些方面

画埋件图是着重考虑哪些方面 埋件设计在幕墙设计中占有相对比较重要的地位,无论从埋件的技术层面还是经济层面上,埋件都是我们不能忽视的,不知大家在设计埋件的时候主要都考虑哪些因素呢? 预埋件设计计算 1.预埋件的作用 混凝土结构中的预埋件起到将构件或设备相互连…

作者头像 李华
网站建设 2026/8/4 20:33:15

一场由 Cursor Remote 引发的生产服务器卡死:从 I/O 阻塞到根因定位

这次事故最麻烦的地方&#xff0c;不是服务器卡死本身&#xff0c;而是它留下的表象几乎都指向磁盘。 生产服务器先后出现两次严重卡顿。故障发生时&#xff0c;接口超时、数据库连接失败、Docker 命令迟迟不返回&#xff0c;连 SSH 都很难登录。重启后所有服务又恢复正常&…

作者头像 李华
网站建设 2026/8/4 20:31:22

Factorio存档管理全攻略:备份、恢复与导入技巧

Factorio存档管理全攻略&#xff1a;备份、恢复与导入技巧 【免费下载链接】factorio-server-manager A tool to help manage Factorio multiplayer servers including mods and save games. 项目地址: https://gitcode.com/gh_mirrors/fa/factorio-server-manager Fact…

作者头像 李华
网站建设 2026/8/4 20:31:00

音视频开发常见的开源项目汇总

本文系统梳理了音视频开发领域最主流的开源项目,涵盖视频编解码器、流媒体服务器、WebRTC 框架、多媒体框架与播放器、音频编解码、前端播放器、工具类七大方向。每个项目都附有详细介绍、核心特性、适用场景与官方链接,可作为选型参考手册收藏。 目录 一、视频编解码器(Cod…

作者头像 李华
网站建设 2026/8/4 20:18:25

2026年广西发酵料行业:诚信厂家如何脱颖而出?

引言随着生态养殖理念的普及&#xff0c;发酵饲料以其“降本提质环保”的优势&#xff0c;成为解决传统养殖中饲料浪费、肠道问题频发、环境恶化等痛点的关键。在众多发酵料品牌中&#xff0c;南宁百珠汇生物科技有限公司凭借其独特的技术、原料把控、品控体系以及服务增值&…

作者头像 李华