easypoi动态设置列宽

  1. 解决方案
    esaypoi内部使用的createSheetForMap 方法固定了列宽,数据会折叠显示
    解决:项目下建立同名包,重写关键的setCellWith方法,把easypoi包下ExcelExportUtil类相关的都拷贝过来,在cn.afterturn.easypoi.excel下,保证jar包路径相同
public void setCellWith(List<ExcelExportEntity> excelParams, Sheet sheet) {for (int i = 0; i < excelParams.size(); i++) {sheet.autoSizeColumn(i);sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10); // 中文宽度//设置最小宽度,防止title字符过短导致内容折叠显示,体验不佳int minWidth = excelParams.get(i).getName().length() * 1600;if (sheet.getColumnWidth(i) < minWidth)sheet.setColumnWidth(i, minWidth); // 无数据额外处理}}
  1. 依赖版本
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>3.3.0</version>
</dependency>

3.excel工具类

/*** @author rjq* @version 1.0* 2021-9-11 10:26**/
public class ExcelUtils {private static final int size=5000;/*** excel 导出** @param list     数据列表* @param fileName 导出时的excel名称* @param response*/public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, fileName, response);}/*** 默认的 excel 导出** @param list     数据列表* @param fileName 导出时的excel名称* @param response*/private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws IOException {//把数据添加到excel表格中Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);downLoadExcel(fileName, response, workbook);}/*** excel 导出** @param list         数据列表* @param pojoClass    pojo类型* @param fileName     导出时的excel名称* @param response* @param exportParams 导出参数(标题、sheet名称、是否创建表头,表格类型)*/private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws IOException {//把数据添加到excel表格中Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);downLoadExcel(fileName, response, workbook);}/*** excel 导出** @param list         数据列表* @param pojoClass    pojo类型* @param fileName     导出时的excel名称* @param exportParams 导出参数(标题、sheet名称、是否创建表头,表格类型)* @param response*/public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, ExportParams exportParams, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel 导出** @param list      数据列表* @param title     表格内数据标题* @param sheetName sheet名称* @param pojoClass pojo类型* @param fileName  导出时的excel名称* @param response*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName, ExcelType.XSSF));}/*** excel 导出** @param list           数据列表* @param title          表格内数据标题* @param sheetName      sheet名称* @param pojoClass      pojo类型* @param fileName       导出时的excel名称* @param isCreateHeader 是否创建表头* @param response*/public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws IOException {ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel 导出多sheet** @param list           数据列表* @param title          表格内数据标题* @param sheetName      sheet名称* @param pojoClass      pojo类型* @param fileName       导出时的excel名称* @param response*/public static void exportExcelSheet(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) throws IOException {int num = list.size()/size;int last = list.size()%size;if (last!=0){num+=1;}List<Map<String, Object>> lists = new ArrayList<>();for (int i = 0; i <num ; i++) {if (i==num-1){Set<?> subList=new HashSet<>(list.subList(size*i,list.size()));Map<String, Object> oneSheet = createOneSheet(sheetName + i, title, pojoClass, subList);lists.add(oneSheet);}else {Set<?> subList=new HashSet<>(list.subList(size*i,size*(i+1)));Map<String, Object> oneSheet = createOneSheet(sheetName + (i+1), title, pojoClass, subList);lists.add(oneSheet);}}Workbook sheetWorkBook = sheetWorkBook(lists);downLoadExcel(fileName,response,sheetWorkBook);}/*** 创建workbook,* 通过maplist填充Excel内容* 返回workbook** 进一步使用可以写入流,e.g.* FileOutputStream fos = new FileOutputStream(file);* workbook.write(fos);* */private static Workbook sheetWorkBook(List<Map<String, Object>> mapListList){Workbook workbook = null;workbook = ExcelExportUtil.exportExcel(mapListList, ExcelType.XSSF);return workbook;}/**** @param exportParams* @param clazz* @param data* @return*/private static Map<String, Object> createOneSheet(ExportParams exportParams, Class<?> clazz, Set<?> data){Map<String, Object> map = new HashMap<>();map.put("title",exportParams);map.put("entity", clazz);map.put("data",data);return map;}/***** @param sheetName* @param title* @param clazz* @param data* @return*/private static Map<String, Object> createOneSheet(String sheetName, String title, Class<?> clazz, Set<?> data){ExportParams exportParams = new ExportParams(title,sheetName, ExcelType.XSSF);return createOneSheet(exportParams,clazz,data);}/*** excel下载** @param fileName 下载时的文件名称* @param response* @param workbook excel数据*/private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));workbook.write(response.getOutputStream());} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** @param file      excel文件* @param pojoClass pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile file, Class<T> pojoClass) throws IOException {return importExcel(file, 1, 1, pojoClass);}/*** excel 导入** @param filePath   excel文件路径* @param titleRows  表格内数据标题行* @param headerRows 表头行* @param pojoClass  pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {if (StringUtils.isBlank(filePath)) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setNeedSave(true);params.setSaveUrl("/excel/");try {return ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);} catch (NoSuchElementException e) {throw new IOException("模板不能为空");} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** @param file       上传的文件* @param titleRows  表格内数据标题行* @param headerRows 表头行* @param pojoClass  pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {if (file == null) {return null;}try {return importExcel(file.getInputStream(), titleRows, headerRows, pojoClass);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** @param inputStream 文件输入流* @param titleRows   表格内数据标题行* @param headerRows  表头行* @param pojoClass   pojo类型* @param <T>* @return*/public static <T> List<T> importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {if (inputStream == null) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setSaveUrl("/excel/");params.setNeedSave(true);try {return ExcelImportUtil.importExcel(inputStream, pojoClass, params);} catch (NoSuchElementException e) {throw new IOException("excel文件不能为空");} catch (Exception e) {throw new IOException(e.getMessage());}}
}

easypoi动态设置列宽相关推荐

  1. excel2010设置列宽为像素_使用像素单位设置 EXCEL 列宽或行高

    在导出 Excel 的时候, 经常要需要给列设置宽度或给行设置高度, 在使用 NPOI 或 EppPlus 等组件进行操作的时候, 列宽和行高的单位都不是像素, 好像是英寸,具体是啥也说不清. 平常在 ...

  2. excel2010设置列宽为像素_怎么改变Excel中列宽的像素

    展开全部 1.打开EXCEL工作bai簿,在[du开始]选项卡-[单zhi元格]功能组中[格式]下拉dao列表中可以设置[行回高].列宽同样在这答里可以找到设置. 2.在行号上点鼠标右键,在弹出的快捷 ...

  3. python tableview 列宽_QTableView设置列宽

    环境: python 2.7.6, pyqt 4.8.6 想要的效果 默认是均匀分布的列宽. 代码顺序: 1.定义QTableview实例tableview 2.定义QAbstractTableMod ...

  4. (二)xlwt模块详解--设置列宽、行高

    第二篇博客是关于设置Excel中的列宽和行高. 废话不多说,直接上代码看效果! 1.设置列宽 xlwt中列宽的值表示方法:默认字体0的1/256为衡量单位.其创建时使用的默认宽度为2960,即11个字 ...

  5. EasyExcel手动设置列宽3.x.x版本

    说明 EasyExcel是3.x.x 版本的 参数1就是Excel列的索引,从0开始 sheet.setColumnWidth(1, 5000); setColumnWidth(i,j)函数中,i是列 ...

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

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

  7. table 固定表格宽度,设置列宽,超出内容省略号显示

    1.table的属性able-layout:fixed,这会使表格大小不会因为内容变化而变化; 2.当表格table-layout为fixed时,其表格宽度由第一行决定,用colgroup配合col标 ...

  8. javaweb使用poi下载excel设置样式、合并单元格、设置列宽

    @Overridepublic void exportMajorInfo(@RequestBody StudentInfoDto studentInfoDto) {// 至少存在4列int miniC ...

  9. datagridview固定列宽_C# DataGridView 如何设置列宽

    问题:C# DataGridView 如何设置列宽?用dataGridView.Colums[0].FillWeight=500;设置无效,界面显示第一列还是很窄. 解答:dataGridView1. ...

最新文章

  1. [翻译]敏捷软件开发 一 之简要介绍
  2. Linux 下 ps 命令的使用详解
  3. activemenu怎么拼 vue_Vue-el-menu使用,点击按钮跳转指定页面
  4. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建--转载
  5. python class和def的区别_Python中class和def的理解
  6. Scala样例类及密封类
  7. android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)
  8. 【Linux系统编程】Linux 进程调度浅析
  9. opencv轻松入门面向python下载_OpenCV轻松入门:面向Python
  10. JBPM工作流入门总结
  11. colgroup标签
  12. AS3多线程快速入门(一):Hello World[
  13. 大数据安全分析的特征有哪些
  14. MathType几个常用字体的名称
  15. 推荐一个完美的计算机科学的视频集
  16. RDP报表工具的环境搭建
  17. 用于全市人群流动预测的深度时空残差网络
  18. python FTPS使用ftplib下载文件(详细)
  19. 多线程----使用线程池爬取二手房信息
  20. 什么是云备份,如何在教育行业正确使用云备份?

热门文章

  1. python深度优先搜索传教士和野人_传教士和野人问题解题思路
  2. PS中消除图片边缘的锯齿
  3. Java怎么实现录屏工具
  4. 微信小程序精准定位百度
  5. 计算机中blank的作用,电脑打开浏览器总是出现about:blank的处理方法
  6. 家里安装两个无线路由器的设置方法【转】
  7. fstream知识梳理
  8. 微博发布的网页链接不能直接打开了,提示需要复制到浏览器中打开怎么办?
  9. vue实现PC端分辨率适配
  10. Java 并发编程(四):如何保证对象的线程安全性