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自动列宽失效相关推荐

  1. easyexcle 设置列宽_easyexcel自适应列宽

    在导出时注册registerWriteHandler(new CustomCellWriteHandler()) /** * @author jamin * @date 2020/7/29 11:28 ...

  2. easyPoi单sheet与多sheet导出excel简单实用(重点:自动列宽的设置)

    导入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base< ...

  3. POI 设置单元格格式,单元格合并,自动列宽等

    POI 设置单元格格式,单元格合并,自动列宽等 设置单元格样式 设置单元格背景 设置单元格合并 解决合并单元格遗留空白边框问题 设置单元格列宽自适应 设置单元格样式 第一种:日期格式 cell.set ...

  4. POI单元格合并(合并后边框空白修复)、自动列宽、水平居中、垂直居中、设置背景颜色、设置字体等常见问题

    POI单元格合并.自动列宽.水平居中.垂直居中.设置背景颜色.设置字体等常用方法 POI设置单元格样式 POI设置文字 POI设置边框样式 POI设置文字水平居中.垂直居中 POI设置背景颜色 POI ...

  5. Java 通过EasyExcel导出的Excel文档的字体,背景色,自动列宽等符合要求

    这次开任务使用的是EasyExcel导出Excel文档,但是在任务过程中,生成的文档的格式要求并不符合产品和测试的期望值,如图: 想着自己地位低下,也无能力反驳.只好硬着头皮查阅资料来达到他们的想要的 ...

  6. EasyExcel设置自动列宽

    EasyExcel 可以通过设置自动列宽来调整表格中列的宽度.具体方法如下: 使用autoSizeColumn()方法:您可以通过调用autoSizeColumn()方法来设置自动列宽.该方法需要您指 ...

  7. EasyExcel表格导出自动列宽设定

    EasyExcel表格导出自动列宽设定 public static class AutoColumnWidthStrategy implements CellWriteHandler {@Overri ...

  8. pandas 导出 Excel 文件的时候自动列宽,自动加上边框

    尝试过 xlrd.xlwt.openpyxl.xlwings.pandas 来处理 Excel,如果说除了读写 Excel,还要做数据分析,还是 pandas 最好用,大多数情况下,你根本不需要把数据 ...

  9. java导出excel表格设置行高_EasyExcel之不使用对象灵活生成Excel,并且调整行高、自动列宽与自由合并...

    超简单 python让excel飞起来+书 34.9元 包邮 (需用券) 去购买 > 最近小秋熊看了阿里的开源项目将EasyExcel,发现它是个很强大的工具,但是官方介绍中大部分都是使用对象, ...

最新文章

  1. java round指令_Java PApplet.round方法代码示例
  2. Object-C时间与字符串的转化 因多语言设置中造成返回Nil的解决方法
  3. MYSQL绿色安装过程
  4. layui 如何清空form表单
  5. MariaDB和MySQL性能测试比较
  6. excel表格打开是乱码怎么办?
  7. python统计pdf下载_python科学计算 第二版
  8. 超级管理器Android,超级文件管理器官方最新版下载-超级文件管理器 安卓版v5.5.2-PC6安卓网...
  9. excel自动调整列宽_Excel教程:A股上了3000点,来张股市涨跌图
  10. 为什么要使用ELK-----EKL的原理 ---以及ELK的配置 详细! 小白都能懂
  11. 华为测试工程师实习面试——技术面+综合面
  12. 使用section.key的形式读取ini配置项
  13. Ubuntu Xfce桌面系统设置项
  14. Linux基础命令与知识点
  15. GO 编程模式学习笔记——GO GENERATION
  16. 小白鼠与毒药解题过程分析
  17. 【半导体先进工艺制程技术系列】FinFET和UTB-SOI简介
  18. 2021-2027全球与中国同种异体人类软骨细胞市场现状及未来发展趋势
  19. 链路追踪-Google-Dapper论文翻译总结
  20. 券商研报复现挑战赛|回望来时路,砥砺再出发

热门文章

  1. VS 运行后没有黑框输出
  2. 好好养生,身体第一,工作第二
  3. 华为荣耀5cvs华为v9play_荣耀畅玩7C和荣耀V9Play综合对比评测 看完这些在决定
  4. android fabulous app,Fabulous - 「 Coming Soon」了几年,终于来了 - iPhone应用 - 【最美应用】...
  5. 植物大战僵尸如何修改金币和关卡
  6. 1530_AURIX_TriCore内核架构_通用寄存器以及系统寄存器
  7. 仿京东实现使用味豆支付
  8. L1-063 吃鱼还是吃肉 (10 分)
  9. 你关注的房子降价了吗?Python分析下北京的二手房数据
  10. 云队友丨苏宁30年,只把2件事做到极致