导入依赖

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version>
</dependency>

单sheet导出

@PostMapping("exportTeacherInfo")@ResponseBodypublic JSONObject exportTeacherInfo(HttpServletRequest request, HttpServletResponse response, @RequestBody ExprotBean exprotBean) throws IOException{try{List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();List<String> objects = exprotBean.getOptions();// 设置动态列initColm(objects, entity);// 动态列数据List<Map<String, Object>> dataArr = new ArrayList<Map<String, Object>>();List<String> zghs = exprotBean.getSels();if (zghs != null && CollectionUtils.isNotEmpty(zghs)){Map<String, Object> param = new HashMap<String, Object>(1);param.put("zghs", zghs);dataArr = jzgJbxxService.findQuery(" SELECT * FROM V_JZG_EXPORT_INFO V WHERE V.ZGH IN (:zghs) ", param);} else{dataArr = jzgJbxxService.findQuery(" SELECT * FROM V_JZG_EXPORT_INFO V  ");}// 创建工作簿Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("教职工信息表", "数据"), entity, dataArr);// 将文件写到系统下载位置,此处多数是直接将表格用输出流写到浏览器页面。String downFileName = FileUtil.writeWorkBookFileToSystem(workbook, systemConfig);return OutPutJson.success("导出成功", downFileName);} catch (Exception e){logger.error(e.getMessage(), e);return OutPutJson.failure("导出失败");}}/*** 初始化动态列* @param checkGzjl* @param entity*/
private void initColm(List<String> checkGzjl, List<ExcelExportEntity> entity){for (int i = 0; i < checkGzjl.size(); i++){JSONObject obj = JSONObject.parseObject(checkGzjl.get(i));String MC = (String) obj.get("MC");      // 此处名称为列名String KEY = (String) obj.get("KEY");    // 此处KEY为与数据集合对应匹配字段代码entity.add(new ExcelExportEntity(MC, KEY));}}

多sheet导出

/*** 导出教职工扩展信息* * @param request* @param response* @param exportKzxxBean* @return* @throws IOException*/@SuppressWarnings("unchecked")@PostMapping("exportTeacherKzxx")@ResponseBodypublic JSONObject exportTeacherKzxx(HttpServletRequest request, HttpServletResponse response, @RequestBody ExportKzxxBean exportKzxxBean) throws IOException{try{// 多sheetList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();// 此为是否存在列List<String> checkGzjl = exportKzxxBean.getCheckGzjl(); List<String> checkJtcy = exportKzxxBean.getCheckJtcy();List<String> zghs = exportKzxxBean.getSels();Map<String, Object> param = new HashMap<String, Object>(1);if (zghs != null && CollectionUtils.isNotEmpty(zghs)){param.put("zghs", zghs);}List<Map<String, Object>> dataArr = new ArrayList<Map<String, Object>>();// 工作经历if (checkGzjl.size() > 1){List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();initColm(checkGzjl, entity); //与单sheet导出所初始化列方法一样if (zghs != null && CollectionUtils.isNotEmpty(zghs)){dataArr = jzgJbxxService.findQuery(" SELECT G.D_ID_, G.ZGH,  G.SZDWMC,TO_CHAR(G.QSRQ,'YYYY-MM') QSNY,TO_CHAR(G.JZRQ,'YYYY-MM') JZNY,G.ZRDZZW,G.ZRJSZWDM,G.ZMR,G.CSGZNR,GETVALUEBYTABLE('STD_GB_ZYJSZW', 'NAME', 'CODE', G.ZRJSZWDM) ZRJSZWMC FROM T_JZG_GZJLXX G WHERE G.ZGH IN (:zghs) ORDER BY G.ZGH ASC, G.QSRQ DESC", param);} else{dataArr = jzgJbxxService.findQuery(" SELECT G.D_ID_,G.ZGH,  G.SZDWMC,TO_CHAR(G.QSRQ,'YYYY-MM') QSNY,TO_CHAR(G.JZRQ,'YYYY-MM') JZNY,G.ZRDZZW,G.ZRJSZWDM,G.ZMR,G.CSGZNR,GETVALUEBYTABLE('STD_GB_ZYJSZW', 'NAME', 'CODE', G.ZRJSZWDM) ZRJSZWMC FROM T_JZG_GZJLXX G  ORDER BY G.ZGH ASC, G.QSRQ DESC ");}Map<String, Object> data = new HashMap<String, Object>();data.put("title", new ExportParams("工作经历", "工作经历"));data.put("entity", entity);data.put("data", dataArr);list.add(data);}// 家庭成员if (checkJtcy.size() > 1){List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();initColm(checkJtcy, entity); //与单sheet导出所初始化列方法一样if (zghs != null && CollectionUtils.isNotEmpty(zghs)){dataArr = jzgJbxxService.findQuery(" SELECT * FROM V_JZG_JTCYXX V WHERE V.ZGH IN (:zghs) ORDER BY  V.ZGH ASC ", param);} else{dataArr = jzgJbxxService.findQuery(" SELECT * FROM V_JZG_JTCYXX V ORDER BY  V.ZGH ASC ");}Map<String, Object> data = new HashMap<String, Object>();data.put("title", new ExportParams("家庭成员", "家庭成员"));data.put("entity", entity);data.put("data", dataArr);list.add(data);}// 新建工作簿Workbook workbook = new HSSFWorkbook(); // 循环创建sheet并匹配数据for (Map<String, Object> map : list){ExcelExportService service = new ExcelExportService();service.createSheetForMap(workbook, (ExportParams) map.get("title"), (List<ExcelExportEntity>) map.get("entity"), (Collection<?>) map.get("data"));}// 将文件写到系统下载位置String downFileName = FileUtil.writeWorkBookFileToSystem(workbook, systemConfig);return OutPutJson.success("导出成功", downFileName);} catch (Exception e){logger.error(e.getMessage(), e);return OutPutJson.failure("导出失败");}}

自动列宽的设置

因ExcelExportUtil.exportExcel()里面new ExcelExportService ().createSheetForMap(workbook, entity, entityList, dataSet);里面设置了固定列宽(可去看源码),导致导出列中字重叠。很不美观。可重写ExcelExportService 类的setCellWith方法。如下:

public void setCellWith(List<ExcelExportEntity> excelParams, Sheet sheet) {for (int i = 0; i < excelParams.size(); i++) {if (excelParams.get(i).getList() != null) {List<ExcelExportEntity> list = excelParams.get(i).getList();for (int j = 0; j < list.size(); j++) {// 调整每一列宽度sheet.autoSizeColumn((short) i);// 解决自动设置列宽中文失效的问题sheet.setColumnWidth(i, sheet.getColumnWidth(j) * 17 / 10);}} else {// 调整每一列宽度sheet.autoSizeColumn((short) i);// 解决自动设置列宽中文失效的问题sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10);}}



easyPoi单sheet与多sheet导出excel简单实用(重点:自动列宽的设置)相关推荐

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

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

  2. Java使用POI为Excel打水印,调整列宽并设置Excel只读

    武林游戏 2017-05-02 11:15 本文介绍在Java语言环境下,使用POI为Excel打水印的解决方案,具体的代码编写以及相关的注意事项. 需求描述: 要求通过系统下载的Excel都带上公司 ...

  3. Excel把行高和列宽单位设置成厘米,精确设置表格

    转自 https://jingyan.baidu.com/article/154b463156adb728cb8f4110.html 实际工作中,一些表格特别是套打时行高列宽经常要求以厘米为单位进行精 ...

  4. php导出excel方法,PHP导出EXCEL简单实用方法

    /** * 得到相应的列表字符串 * * @param $titArr 字段和标题的对应数组 * @param $data 数据的列表数组 * @param $fileName 文件的名字 * @pa ...

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

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

  6. 使用easypoi和原生poi接口实现导出excel时选中指定单选框

    使用easypoi和原生poi接口实现导出excel时选中指定单选框 工程需求:导出excel时,选中指定的单选框 步骤一:在excel模板中插入三个单选框 步骤二:设置单选框的单元格连接 我们发现 ...

  7. JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况——保姆级别,真的不能再详细了,代码拿来即用)

    JAVA导出Excel通用工具--第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选.动态合并横向(纵向)单元格等多种复杂情况--保姆级别,真的不能再详细了,封装通用工具类,代码拿 ...

  8. Java POI的Excel操作(行高列宽比例;生成说明,标题,字段;导出Excel代码,压缩)

    摘要 本文主要讲解了POI中的表格行高列宽比例,以及根据这个不同的场景生成,如标题,说明,字段头.主要是思路给大家参考,生成表格如下(完整代码代码在最后,由于我的数据格式特殊,我把我以前的通用导出数据 ...

  9. 导出Excel之Epplus使用教程2(样式设置)

    导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他 ...

最新文章

  1. 数据揭秘清华研究生日常!47%单身,50.7%从未打过游戏...
  2. 2018 年最值得期待的学术进展——致人工智能研究者们的年终总结
  3. Android 启动模式简介
  4. arm开发板放张图片动起来_ARM裸机不能正确显示图片的问题
  5. 不显示坐标刻度_如何使用坐标交叉位置来改变Excel图表的展现形态
  6. mongdb学习笔记
  7. 我不是在吓你,但是区块链,可能真的是普通人弯道超车的最后一个机会了。
  8. 一次性插入上万条数据的写法
  9. Python:int,float,str之间的转换
  10. java的枚举_Java 枚举
  11. python13文件_python中13个实用的文件操作
  12. Python:实现password generator复杂密码生成器算法(附完整源码)
  13. word文档通配符换行_这个小工具,让你word操作效率翻倍
  14. CSDN认证博客专家申请通过,感动,欣慰,分享一下我的经验!
  15. openslide安装问题
  16. 阿里、腾讯、网易、极验、顶象滑块验证码识别
  17. 日淘转运公司的横向对比 及如何选择转运渠道和增值服务
  18. 4 海康视觉平台VisionMaster 上手系列:常用工具(一)
  19. 【IoT】加密与安全:PKI 安全体系浅析
  20. Android Widget进阶——桌面便笺程序实例的实现流程与美化设计(图)

热门文章

  1. 股权项目披露:扬州国扬电子有限公司6.2664%股权转让
  2. 几条简单实用的谷歌搜索小技巧
  3. 学透CSS-如何组织你的CSS代码
  4. u盘文件或目录损坏且无法读取怎么修复解决
  5. labview python opencv_OpenCV官方教程中文版(for Python)pdf+自己编写的全套目录
  6. 关于windows11新装系统界面无法登录微软账号的问题
  7. 微信小程序 swiper和weiper-itme组件的基本使用,微信小程序轮播图这么做教程
  8. Sansec HSM 通过 FIPS 140-2 Level 3 认证
  9. 如何将VM虚拟机的应用添加到桌面?
  10. textbox控件只输入数字