EasyExcel碰到问题记录

news/2025/10/28 17:16:32/文章来源:https://www.cnblogs.com/Jcloud/p/19172300

1、富文本中文字设置不同颜色和字体不生效

                String stringCellValue = cell.getStringCellValue();if (StringUtils.isNotBlank(stringCellValue) && stringCellValue.contains(startIndex) && stringCellValue.contains(endIndex)) {RichTextString richStringCellValue = cell.getRichStringCellValue();Font redFont = workbook.createFont();redFont.setColor(IndexedColors.RED.getIndex());if (richStringCellValue instanceof XSSFRichTextString) {XSSFRichTextString xssfRichTextString = new XSSFRichTextString(cell.getStringCellValue());xssfRichTextString.applyFont(stringCellValue.indexOf(startIndex),stringCellValue.indexOf(endIndex) +endIndex.length() ,redFont);cell.setCellValue(xssfRichTextString);} else if (richStringCellValue instanceof HSSFRichTextString) {HSSFRichTextString hssfRichTextString = new HSSFRichTextString(cell.getStringCellValue());hssfRichTextString.applyFont(stringCellValue.indexOf(startIndex),stringCellValue.indexOf(endIndex) +endIndex.length() ,redFont);cell.setCellValue(hssfRichTextString);}cellStyle.setFont(redFont);} else {// 清空样式cell.setCellStyle(cellStyle);}

上面代码设置了富文本指定范围的文字设置新的字体,但是生成的文件还是不生效。

EasyExcelFactory.write(new File(pathName)).head(titleList()).inMemory(Boolean.TRUE)  // 指定这个属性为true,才支持富文本和注释.registerWriteHandler(new HeadRowWriteHandler()).sheet(0).doWrite(Lists.newArrayList());

原因:

在 EasyExcel 中,inMemory 方法用于设置是否在内存中生成 Excel 文件。默认情况下,EasyExcel 会在磁盘上创建一个缓存文件,然后将数据写入这个缓存文件,最后再将缓存文件写入到 Excel 文件中。

如果你调用 inMemory(true),EasyExcel 将会在内存中生成 Excel 文件,而不是使用缓存文件。这意味着:

1.更快的写入速度:因为不需要频繁地读写磁盘,内存模式下的写入速度通常会更快。
2.支持 Comment 和 RichTextString:如果你需要在单元格中添加注释或使用富文本字符串,这些功能只能在内存模式下使用。
3.限制大文件写入:内存模式下,所有的数据都会被加载到内存中,这可能会导致内存溢出问题,特别是当你处理大型数据集时。

使用内存模式的主要优点是它可以支持更复杂的单元格操作,如添加注释或使用富文本字符串。然而,如果你的数据量很大,可能需要避免使用内存模式以防止内存问题。

 

2、冻结单元格

可以通过sheet.createFreezePane(column,row);方法指定冻结的列和行索引。

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.Sheet;import java.util.Objects;/*** 冻结单元格**/
public class FreezePaneWriteHandler implements SheetWriteHandler {private int column;private int row;public FreezePaneWriteHandler(Integer column, Integer row) {this.column = column;this.row = row;}@Overridepublic void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {Sheet sheet = writeSheetHolder.getSheet();if (Objects.nonNull(sheet)) {sheet.createFreezePane(column,row);}}
}

3、不合并单元格

Easyexcel使用中,生成多行表头模版时,同一行如果多个列内容一样,会被自动合并单元格,要避免这个问题,需要通过特殊处理。

import com.alibaba.excel.constant.OrderConstant;
import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;import java.util.Set;/*** 表头不合并策略* @author sunlei61* @date 2024/8/17**/
public class HeadNoMergeWriteHandler implements RowWriteHandler {/*** 指定哪些行需要合并单元格*/private Set<Integer> rowNum;/*** 排除哪些不合并单元格的行*/private Set<Integer> excludeRowNum;@Overridepublic int order() {return OrderConstant.FILL_STYLE + 3;}public HeadNoMergeWriteHandler(){}public HeadNoMergeWriteHandler(Set<Integer> rowNum){this.rowNum = rowNum;}public HeadNoMergeWriteHandler(Set<Integer> rowNum, Set<Integer> excludeRowNum){this.rowNum = rowNum;this.excludeRowNum = excludeRowNum;}@Overridepublic void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {if (!isHead){return;}if (CollectionUtils.isEmpty(rowNum) || rowNum.contains(row.getRowNum())) {// 如果是表头,取消合并Sheet sheet = writeSheetHolder.getSheet();int totalMergedRegions = sheet.getNumMergedRegions();for(int i = totalMergedRegions -1; i >=0; i--){CellRangeAddress mergedRegion = sheet.getMergedRegion(i);if(CollectionUtils.isEmpty(excludeRowNum)||!excludeRowNum.contains(mergedRegion.getFirstRow())){sheet.removeMergedRegion(i);}}}}}

4、列宽自适应宽度

生成表格列比较多,制定特定的宽度会让表格很长,即使单元格内容一个字,也会很宽,不是很友好,可以通过设置sheet的自适应宽度来设置。

import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;import java.util.Set;/*** 列宽度自动适应* @author sunlei61* @date 2024/9/26**/
public class AutoSizeColumnWriterHandler implements RowWriteHandler {/**不需要自动适用宽度的列集合*/private Set<Integer> excludeColumns;public AutoSizeColumnWriterHandler(){}public AutoSizeColumnWriterHandler(Set<Integer> excludeColumns) {this.excludeColumns = excludeColumns;}@Overridepublic void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {Integer sheetNo = writeSheetHolder.getSheetNo();if (sheetNo == 0 ) {Sheet sheet = writeSheetHolder.getSheet();int columns = row.getPhysicalNumberOfCells();for (int i = 0; i < columns; i++) {if (CollectionUtils.isNotEmpty(excludeColumns) && excludeColumns.contains(i)) {continue;}sheet.autoSizeColumn(i);}}}
}

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

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

相关文章

2025年修护/二硫化硒去屑/香氛/控油蓬松/洗发水推荐榜:西安悦己容生物主打植萃护理,四大品牌以精准配方适配多元发质

随着消费者对发质护理的需求从 “基础清洁” 转向 “针对性修护”,植萃成分、无刺激配方、细分发质适配成为洗发水市场核心竞争点。基于成分安全性、使用体验与用户口碑,2025 年洗发水领域优质企业推荐如下:​ 西安…

2025喷涂/聚脲涂料领域源头厂家推荐榜:宁国创遂新材料领衔,多企业助力防腐防护升级​

在工业设备防腐、建筑防水、交通设施耐磨等场景中,聚脲涂料因具备快速固化、高弹性、耐候性强等优势,成为材料领域的重要选择。为展现聚脲涂料领域优质企业实力,本次 2025 推荐榜聚焦安徽区域,结合企业技术专业性、…

2025弯管领域源头厂家推荐榜:合肥市翼达机械领衔,多企业助力工业管件加工升级​

在汽车制造、暖通工程、家电生产等工业领域,弯管作为关键管件,其精度、材质适配性与加工效率直接影响下游产品性能。为展现弯管领域优质企业实力,本次 2025 弯管领域推荐榜聚焦安徽区域,结合企业技术专业性、产品适…

2025不锈钢剪板折弯推荐榜:上海一步一金属主打定制加工,四大企业以精准工艺赋能工业制造

随着机械制造、装饰工程等领域对不锈钢构件精度要求的提升,不锈钢剪板折弯作为关键加工环节,其工艺精度、定制化能力与交付效率成为企业竞争核心。基于加工质量、行业适配性与客户口碑,2025 年不锈钢剪板折弯领域优…

2025年碳氢肥料生产厂家权威推荐榜单:农产品用料/增产用肥/碳氢核肥邮沃源头厂家精选

在生态农业与绿色肥料需求日益增长的今天,碳氢肥料作为一种利用二氧化碳资源的新型肥料,正成为农资市场的热门选择。 随着国家“双碳”政策的深入推进和生态农业理念的普及,碳氢肥料市场近年来呈现出显著的增长态势…

算法分析--分治--3.矩阵乘法

1.1 题目描述 输入的第一行中有3个整数n, m,k,表示A矩阵是n行m列,B矩阵是m行k列。接下来的n行,每行m个数字,表示矩阵A中的元素。接下来的m行,每行k个元素,表示矩阵B中的元素。 【样例输入】 3 2 3 1 1 1 1 1 1 1 1…

三立轴承:精密轴承安装后怎么检查?

数控机床、加工中心对主轴轴承的要求高,通常要配置P5、P4级别的精密轴承,但有时候运行效果不理想,往往排查下来是安装不到位引起的。精密轴承不仅自身质量要过关,同时安装过程也很重要,三立轴承建议装完之后要仔细…

2025年灭火装置厂家推荐排行榜,气体灭火装置,自动灭火装置,机床灭火装置,七氟丙烷灭火装置,二氧化碳灭火装置,清洗机灭火装置,走心机灭火装置,搓丝机灭火装置,磨床灭火装置,火花机灭火装置公司推荐

2025年灭火装置厂家推荐排行榜:专业选购指南与权威品牌分析 行业背景与发展趋势 随着工业自动化程度的不断提高,各类精密加工设备在生产过程中的火灾风险日益凸显。灭火装置作为工业安全的重要保障,其技术水平和产品…

CF2038B Make It Equal

首先感受一下不难发现可以二分 \(p\)。 现在相当于要进行操作使得所有数都变为 \(p\),比较暴力的做法是从 \(1\) 开始,如果比 \(p\) 打就一直减,然后递推到下一项,如果递推完了再回到第一项,可以证明递推的次数比…

2025年高温线缆优质厂家盘点:实力派企业守护工业核心需求,铁氟龙高温线,硅胶高温线,高压高温线厂家推荐

在工业制造、新能源、航空航天等领域,高温线缆作为保障设备稳定运行的关键部件,其耐温性能、绝缘强度与使用寿命直接关系到生产安全与效率。经过对行业资质、技术实力、市场口碑等多维度调研,值得关注的高温线缆厂家…

my.conf脚本备份

✅ 修正版配置备份脚本 文件路径建议放在: /mnt/sdc/backup/mysql_backup.sh 内容如下: #!/bin/bash # ========================================== # 名称:配置文件备份脚本 # 说明:定期备份 bfm 应用 JAR 包 # …

详细介绍:SQL中的CTE(公用表表达式)完全指南:从入门到精通

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MySQL 安全审计日志保留与定期备份整改操作文档

MySQL 日志定期备份与保留整改操作文档 一、整改背景 等保测评发现项:问题描述: MySQL 数据库日志保留不满足 180 天,未定期进行备份。 控制要求: 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆…

Alibaba Cloud Linux 3 +Docker 部署 ThinkPHP6 (宝塔环境)-问题篇 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MES 文摘

活到老,学到老。

从网页到桌面:自定义URL协议让应用无缝衔接

从网页到桌面:自定义URL协议让应用无缝衔接技术的世界里,协议如同世界的语言,掌握它便能打通无数可能在浏览网页时,点击一个链接就能启动电脑上的本地应用程序,这种神奇的体验背后隐藏着怎样的技术原理?本文将从…

2025 年西宁靠谱旅行社,青海出国游报团旅行社,青甘环线旅行社最新推荐,聚焦资质、案例、售后的五家旅行社深度解读

引言 为助力消费者精准筛选 2025 年西宁靠谱旅行社、青海出国游报团旅行社及青甘环线旅行社,青海省旅游协会联合国内知名旅游测评机构,开展了为期 3 个月的权威测评。本次测评采用 “三维九项” 评估体系,从资质合规…

Oracle案例:tar安装数据库并从10.2.0.4.8升级到10.2.0.4.9

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。Oracle案例:…

2025 年西北环线旅行社,青海口碑最好的旅行社,青甘大环线旅行社最新推荐,聚焦资质、案例、售后的五家旅行社深度解读

引言 随着西北环线、青甘大环线旅游热度持续攀升,选择靠谱旅行社成为游客出行关键。为给游客提供权威参考,旅游协会联合地方旅游行业协会开展 2025 年相关旅行社测评工作。测评从资质合规性、服务案例质量、售后保障…

读书笔记:Oracle分区黑科技:间隔引用分区与虚拟列分区详解

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…