EasyExcel 模板+公式填充

ops/2024/12/29 0:14:37/

使用 CellWriteHandler 的实现类来实现公式写入

@Data
@NoArgsConstructor
public class CustomCellWriteHandler implements CellWriteHandler {private int maxRowNum = 2000;// 动态传入列表数量public CustomCellWriteHandler(int maxRowNum) {this.maxRowNum = maxRowNum;}@Overridepublic void afterCellDispose(CellWriteHandlerContext context) {CellWriteHandler.super.afterCellDispose(context);// 可获取 sheetNo 或 sheetName 用于判断// Integer sheetNo = context.getWriteSheetHolder().getSheetNo();Cell cell = context.getCell();//行int rowNum = cell.getRowIndex();//列int columnNum = cell.getColumnIndex();// 对第3行第3列的单元格进行替换,设置为公式if (rowNum == 2 && columnNum == 2) {cell.setCellFormula("SUM(C4:C" + maxRowNum + ")");}}
}

注册填充

// 构建导出表文件
ClassPathResource classPathResource = new ClassPathResource("excel_template/BaseInfoExport.xls");
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(classPathResource.getInputStream()).excelType(ExcelTypeEnum.XLS).autoCloseStream(Boolean.FALSE).build();
Map<String, Object> map = MapUtils.newHashMap();
// 在 fill 中必须要添加对应的模板,否则会变为空白
map.put("summary", "");
// 构造导出配置
WriteSheet writeSheet = EasyExcel.writerSheet(5).registerWriteHandler(new CustomCellWriteHandler(dataList.size() + 3)).build();
// 执行填充,先填充 dataList,再填充 map
excelWriter.fill(dataList, writeSheet);
excelWriter.fill(map, writeSheet);
excelWriter.finish();

注意:如果使用了 FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
会动态添加新行。如果先填充了 map 再填充列表,会把 map 填充的公式给拉长,导致填充位置与输入不一致。可以先填充列表,再填充 map。

注意2:此方法对 xls 格式的文件有效,对 xlsx 的不生效,能输出公式但不会自动计算。


http://www.ppmy.cn/ops/145773.html

相关文章

免费 IP 归属地接口

免费GEOIP&#xff0c;查询IP信息&#xff0c;支持IPV4 IPV6 ,包含国家地理位置&#xff0c;维度&#xff0c;asm,邮编 等&#xff0c;例如 例如查询1.1.1.1 http://geoip.91hu.top/?ip1.1.1.1 返回json 对象

深度学习中常见的权重初始化方法

今天给大家分享常见的 7 种权重初始化方法 初始化深度学习模型的权重是影响模型训练速度、稳定性以及最终性能的重要因素。 以下是常见的 7 种权重初始化方法&#xff0c;每种方法都有其适用的场景和特性。 1.零初始化&#xff08;Zero Initialization&#xff09; 将所有权…

EKF 自动匹配维度 MATLAB代码

该 M A T L A B MATLAB MATLAB代码实现了扩展卡尔曼滤波( E

君正buildroot2020在Ubuntu22编译报错

君正buildroot2020在Ubuntu22编译报错 君正buildroot2020在Ubuntu22编译报错报错解决办法 君正buildroot2020在Ubuntu22编译报错 报错 fakeroot libfakeroot.c: In function ‘chown’:libfakeroot.c:99:40: error: ‘_STAT_VER’ undeclared (first use in this function)9…

【深度学习基础|pip安装】pip 安装库时,能够自动下载、安装、更新和卸载 Python 包,为基于python语言构建深度学习网络提供了方便。

【深度学习基础|pip安装】pip 安装库时&#xff0c;能够自动下载、安装、更新和卸载 Python 包&#xff0c;为基于python语言构建深度学习网络提供了方便。 【深度学习基础|pip安装】pip 安装库时&#xff0c;能够自动下载、安装、更新和卸载 Python 包&#xff0c;为基于pyth…

软考教材重点内容 信息安全工程师 第 11 章 网络物理隔离技术原理与应用

11 网络物理隔离概念 《计算机信息系统国际联网保密管理规定》第二章第六条规定&#xff0c;“涉及国家秘密的计算机信息系统&#xff0c;不得直接或间接地与国际互联网或其他公共信息网络相联接&#xff0c;必须实行物理隔离。 “物理隔离技术”&#xff0c;其基本原理是避免两…

五十一:HPACK如何减少HTTP头部的大小?

在现代的Web通信中,HTTP是最常用的协议。然而,随着网络应用程序的复杂化,HTTP头部的大小迅速增加,尤其是在HTTP/2中,由于其多路复用特性,多个请求和响应共享同一个连接,头部大小对性能的影响变得更加显著。为了解决这个问题,HTTP/2引入了HPACK压缩算法,以减少HTTP头部…

《操作系统真象还原》第十章(二)—— 键盘驱动程序的编写与输入系统

章节任务介绍 在上一节中&#xff0c;我们介绍了操作系统的同步机制互斥锁的内容&#xff0c;并手动实现了互斥锁&#xff0c;同时实现了线程安全的屏幕打印。 至此&#xff0c;我们算是基本完成了操作系统的“输出”功能&#xff0c;但目前为止我们的输入仍旧依赖于程序&…