com.alibaba

easyexcel

2.1.4

导出controller层代码

@RequestMapping("/download")

public void download(HttpServletResponse response) throws IOException {

response.setContentType("application/vnd.ms-excel");

response.setCharacterEncoding("utf-8");

String fileName = URLEncoder.encode("测试", "UTF-8");

response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");

List depts = new ArrayList<>(3);

for (int i = 0; i < 3; i++) {

Dept dept = new Dept();

dept.setDname("d"+i);

dept.setDeptno(i);

dept.setDbDource("s"+i);

dept.setEmpname("0000000000000000000000000000000000000000000e"+i);

depts.add(dept);

}

EasyExcel.write(response.getOutputStream(), Dept.class)

.head(Dept.class).registerWriteHandler(new CustomCellWriteHandler())

.sheet("模板").doWrite(depts);

}

dept

import com.alibaba.excel.annotation.ExcelProperty;

public class Dept {

@ExcelProperty(value = "部门编号")

private Integer deptno;

@ExcelProperty(value = "部门名称")

private String dname;

@ExcelProperty(value = "部门来源")

private String dbDource;

@ExcelProperty(value = "员工名")

private String empname;

// 省略get/set

writeHandler

package com.example.springbootbasic.config;

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;

import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;

import org.apache.poi.ss.usermodel.Cell;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy {

private static final Logger LOGGER = LoggerFactory.getLogger(CustomCellWriteHandler.class);

private Map> CACHE = new HashMap<>();

@Override

protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {

boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);

if (needSetWidth) {

Map maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());

if (maxColumnWidthMap == null) {

maxColumnWidthMap = new HashMap<>();

CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);

}

Integer columnWidth = this.dataLength(cellDataList, cell, isHead);

if (columnWidth >= 0) {

if (columnWidth > 255) {

columnWidth = 255;

}

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(List cellDataList, Cell cell, Boolean isHead) {

if (isHead) {

return cell.getStringCellValue().getBytes().length;

} else {

CellData cellData = cellDataList.get(0);

CellDataTypeEnum type = cellData.getType();

if (type == null) {

return -1;

} else {

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;

}

}

}

}

}

easyexcel怎么设置表头宽度_easyexcel 自动设置列宽相关推荐

  1. QTableView如何设置表头宽度

    需求回顾 由于要实现国际化,有些字体翻译成英文会非常长,为避免遮挡,所以希望能指定某一列的表头宽一些. 过程 我尝试过以下几种方式,但是没有效果 1.派生类QTableViewModel的Header ...

  2. easyexcel 检查表头是否匹配_EasyExcel的不确定表头(根据数据生成表头)的excel导出和二级表头以及设置表头的宽度自适应...

    1.效果如图 2.Controller @GetMapping("/exportExcel")public void exportExcel(@RequestParam(value ...

  3. EasyExcel导出、按列设置样式、根据表头字数设置列宽、Converter转换

    文章目录 一.Excel导出实体类 二.自定义样式handler 三.servicesImple类中实现方法 四.表头设置列宽handler 五.Converter转换 一.Excel导出实体类 im ...

  4. EasyExcel代码层面设置写出的Excel样式、以及拦截器策略的使用、自动列宽设置、EasyExcel默认设置详解

    一.概述 虽然EasyExcel已经提供了一系列注解方式去设置样式. 但是如果没有实体类,或者想要更精确的去设置导出文件的Excel样式的时候就需要在代码层面去控制样式了. 二.使用已有拦截器自定义样 ...

  5. easyexcel 在 设置标题_EasyExcel,让excel导入导出更加简单

    EasyExcel 在做excel导入导出的时候,发现项目中封装的工具类及其难用,于是去gitHub上找了一些相关的框架,最终选定了EasyExcel.之前早有听闻该框架,但是一直没有去了解,这次借此 ...

  6. EasyExcel 批量设置单元格样式(字体样式、底纹样式、边框样式、对齐方式、自动换行、旋转文字、竖向文字、数据格式、自动收缩)

    目录 1 Maven配置 2 CellStyleModel 3 CustomCellStyleHandler 4 调试代码 5 调试结果 注: 1 Maven配置 <!--hutool工具包-- ...

  7. easyExcel实现动态表头设置以及单元格样式设置

    easyexcel实现文件导入导出请看上篇博客:springboot集成easyExcel实现文件导入导出 上篇文章已经知道如何使用easyExcel实现简单的文件导入导出,但是导出的表头和格式都是固 ...

  8. css根据当前宽度设置css,JS和CSS实现自动根据分辨率设置页面宽度

    为了实现自动根据分辨率设置页面宽度,首先我们要先知道一个JavaScript脚本document.documentElement.clientWidth获取页面宽度. 为了说明在IE和FireFox等 ...

  9. 设置vim的默认工作路径同时与自动设当前编辑的文件所在目录为当前工作路径不冲突...

    问题: 想让vim自动设当前编辑的文件所在目录为当前工作路径不冲突,但是当vim新建文件的时候,工作路径会又自动切换缓存path下. 如何使当使用vim打开文件时,vim的工作路径是当前文件所在的路径 ...

最新文章

  1. 网页鼠标滚动实现图片缩放
  2. GVRP和VTP比较
  3. 单核工作法16:循序渐进(下)
  4. Linux下的文件系统与目录系统简介
  5. js 如何去除字符两端的引号
  6. 用计算机表示45,计算机应用基础信息专业技术习题(45页)-原创力文档
  7. fft谱分析的误差有哪些原因造成的?如何减小分析误差。_频谱分析仪25问
  8. JAVA8给我带了什么——并流行和接口新功能
  9. 检测浏览器的关闭事件
  10. 傲腾机器Linux,【收藏】傲腾装机必看!
  11. python 压力测试
  12. 负载均衡(Load Balance)
  13. linux rescue 硬盘,linux rescue
  14. JS的日期操作:String转date日期格式、求日期差
  15. Android音频可视化
  16. 适配USB接口奕力 ILITEK Multi-Touch-V5000
  17. 2020科协竞赛部第一次培训
  18. python 从大图中找小图
  19. (二十六)Fama-French三因素模型及应用
  20. 2022-2028全球与中国高级计划和排程软件市场现状及未来发展趋势

热门文章

  1. Blender全流程制作真实感3D产品学习教程
  2. 设计模式 之美 -- 单例模式
  3. 测试linux下磁盘的读写速率
  4. 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
  5. 词汇的理解 —— 汉译英(术语)
  6. linux之x86裁剪移植---字符界面sdl开发入门
  7. 【宋红康学习日记11】Object类与equals方法
  8. javascript 利用 - 枚举思想 - 添加地名的一个小例子
  9. (转)Linux进程调度时机
  10. Android如何防止apk程序被反编译