easyexcle 设置列宽_easyexcel自动列宽失效
easyexcel版本2.1.4
问题现象:
使用自动列宽LongestMatchColumnWidthStyleStrategy时,除了第一次调用接口,列宽自动,后面几次调用列宽未设置
问题原因:
CACHE被static标识,是类共享的,所以除了第一次有变化,后面的列宽都不会变化。
解决方法:
自己实现一个类似的拦截器,参考代码
package com.centerm.mrrs.handler;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.CollectionUtils;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
/**
* Take the width of the longest column as the width.
*
* This is not very useful at the moment, for example if you have Numbers it will cause a newline.And the length is not
* exactly the same as the actual length.
*
* @author Jiaju Zhuang
*/
public class ColumnWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
private static final int MAX_COLUMN_WIDTH = 255;
private final Map> CACHE = new HashMap>(8);
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, ListcellDataList, Cell cell, Head head,
Integer relativeRowIndex, Boolean isHead) {
boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
if (!needSetWidth) {
return;
}
MapmaxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
if (maxColumnWidthMap == null) {
maxColumnWidthMap = new HashMap(16);
CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
}
Integer columnWidth = dataLength(cellDataList, cell, isHead);
if (columnWidth < 0) {
return;
}
if (columnWidth > MAX_COLUMN_WIDTH) {
columnWidth = MAX_COLUMN_WIDTH;
}
Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
}
}
private Integer dataLength(ListcellDataList, Cell cell, Boolean isHead) {
if (isHead) {
return cell.getStringCellValue().getBytes().length;
}
CellData cellData = cellDataList.get(0);
CellDataTypeEnum type = cellData.getType();
if (type == null) {
return -1;
}
switch (type) {
case STRING:
return cellData.getStringValue().getBytes().length;
case BOOLEAN:
return cellData.getBooleanValue().toString().getBytes().length;
case NUMBER:
return cellData.getNumberValue().toString().getBytes().length;
default:
return -1;
}
}
}
easyexcle 设置列宽_easyexcel自动列宽失效相关推荐
- easyexcle 设置列宽_easyexcel自适应列宽
在导出时注册registerWriteHandler(new CustomCellWriteHandler()) /** * @author jamin * @date 2020/7/29 11:28 ...
- easyPoi单sheet与多sheet导出excel简单实用(重点:自动列宽的设置)
导入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base< ...
- POI 设置单元格格式,单元格合并,自动列宽等
POI 设置单元格格式,单元格合并,自动列宽等 设置单元格样式 设置单元格背景 设置单元格合并 解决合并单元格遗留空白边框问题 设置单元格列宽自适应 设置单元格样式 第一种:日期格式 cell.set ...
- POI单元格合并(合并后边框空白修复)、自动列宽、水平居中、垂直居中、设置背景颜色、设置字体等常见问题
POI单元格合并.自动列宽.水平居中.垂直居中.设置背景颜色.设置字体等常用方法 POI设置单元格样式 POI设置文字 POI设置边框样式 POI设置文字水平居中.垂直居中 POI设置背景颜色 POI ...
- Java 通过EasyExcel导出的Excel文档的字体,背景色,自动列宽等符合要求
这次开任务使用的是EasyExcel导出Excel文档,但是在任务过程中,生成的文档的格式要求并不符合产品和测试的期望值,如图: 想着自己地位低下,也无能力反驳.只好硬着头皮查阅资料来达到他们的想要的 ...
- EasyExcel设置自动列宽
EasyExcel 可以通过设置自动列宽来调整表格中列的宽度.具体方法如下: 使用autoSizeColumn()方法:您可以通过调用autoSizeColumn()方法来设置自动列宽.该方法需要您指 ...
- EasyExcel表格导出自动列宽设定
EasyExcel表格导出自动列宽设定 public static class AutoColumnWidthStrategy implements CellWriteHandler {@Overri ...
- pandas 导出 Excel 文件的时候自动列宽,自动加上边框
尝试过 xlrd.xlwt.openpyxl.xlwings.pandas 来处理 Excel,如果说除了读写 Excel,还要做数据分析,还是 pandas 最好用,大多数情况下,你根本不需要把数据 ...
- java导出excel表格设置行高_EasyExcel之不使用对象灵活生成Excel,并且调整行高、自动列宽与自由合并...
超简单 python让excel飞起来+书 34.9元 包邮 (需用券) 去购买 > 最近小秋熊看了阿里的开源项目将EasyExcel,发现它是个很强大的工具,但是官方介绍中大部分都是使用对象, ...
最新文章
- java round指令_Java PApplet.round方法代码示例
- Object-C时间与字符串的转化 因多语言设置中造成返回Nil的解决方法
- MYSQL绿色安装过程
- layui 如何清空form表单
- MariaDB和MySQL性能测试比较
- excel表格打开是乱码怎么办?
- python统计pdf下载_python科学计算 第二版
- 超级管理器Android,超级文件管理器官方最新版下载-超级文件管理器 安卓版v5.5.2-PC6安卓网...
- excel自动调整列宽_Excel教程:A股上了3000点,来张股市涨跌图
- 为什么要使用ELK-----EKL的原理 ---以及ELK的配置 详细! 小白都能懂
- 华为测试工程师实习面试——技术面+综合面
- 使用section.key的形式读取ini配置项
- Ubuntu Xfce桌面系统设置项
- Linux基础命令与知识点
- GO 编程模式学习笔记——GO GENERATION
- 小白鼠与毒药解题过程分析
- 【半导体先进工艺制程技术系列】FinFET和UTB-SOI简介
- 2021-2027全球与中国同种异体人类软骨细胞市场现状及未来发展趋势
- 链路追踪-Google-Dapper论文翻译总结
- 券商研报复现挑战赛|回望来时路,砥砺再出发
热门文章
- VS 运行后没有黑框输出
- 好好养生,身体第一,工作第二
- 华为荣耀5cvs华为v9play_荣耀畅玩7C和荣耀V9Play综合对比评测 看完这些在决定
- android fabulous app,Fabulous - 「 Coming Soon」了几年,终于来了 - iPhone应用 - 【最美应用】...
- 植物大战僵尸如何修改金币和关卡
- 1530_AURIX_TriCore内核架构_通用寄存器以及系统寄存器
- 仿京东实现使用味豆支付
- L1-063 吃鱼还是吃肉 (10 分)
- 你关注的房子降价了吗?Python分析下北京的二手房数据
- 云队友丨苏宁30年,只把2件事做到极致