springboot集成easypoi实现excel多sheet导出,并设置表头样式

  1. 导入依赖

    <!--easypoi依赖,excel导入导出-->
    <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.3.0</version>
    </dependency>
    
  2. 导出实体类

    // 单选
    import cn.afterturn.easypoi.excel.annotation.Excel;
    import lombok.Data;/*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/09/16/12:16* @Description:*/
    @Data
    public class SheetRadioExcel {private Long questionId;@Excel(name = "试题内容",width = 50, isImportField = "true_st")private String content;@Excel(name = "正确选项内容",width = 25,isImportField = "true_st")private String rightContent;@Excel(name = "选项A",width = 50, isImportField = "true_st")private String optionA;@Excel(name = "选项B",width = 50, isImportField = "true_st")private String optionB;@Excel(name = "选项C",width = 50, isImportField = "true_st")private String optionC;@Excel(name = "选项D",width = 50, isImportField = "true_st")private String optionD;
    }// 多选
    import cn.afterturn.easypoi.excel.annotation.Excel;
    import lombok.Data;/*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/09/16/12:20* @Description:*/
    @Data
    public class SheetMultipleExcel {@Excel(name = "试题内容",width = 50, isImportField = "true_st")private String content;@Excel(name = "正确选项内容(多个选项之间用'*'隔开)",width = 25,isImportField = "true_st")private String rightContent;@Excel(name = "选项A",width = 50, isImportField = "true_st")private String optionA;@Excel(name = "选项B",width = 50, isImportField = "true_st")private String optionB;@Excel(name = "选项C",width = 50, isImportField = "true_st")private String optionC;@Excel(name = "选项D",width = 50, isImportField = "true_st")private String optionD;
    }
    // 判断import cn.afterturn.easypoi.excel.annotation.Excel;
    import lombok.Data;/*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/09/16/12:25* @Description:*/
    @Data
    public class SheetJudgeExcel {@Excel(name = "试题内容",width = 50, isImportField = "true_st")private String content;@Excel(name = "正确内容",width = 25,isImportField = "true_st")private String rightContent;@Excel(name = "选项1",width = 50, isImportField = "true_st")private String judgeA;@Excel(name = "选项2",width = 50, isImportField = "true_st")private String judgeB;
    }
    
  3. 表头样式类

    import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler;
    import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
    import org.apache.poi.ss.usermodel.*;/*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/09/16/15:45* @Description:*/
    public class ExcelExportTitleStyle extends AbstractExcelExportStylerimplements IExcelExportStyler {private Workbook workbook;public ExcelExportTitleStyle() {}public ExcelExportTitleStyle(Workbook workbook) {this.workbook = workbook;super.createStyles(workbook);}@Overridepublic CellStyle getTitleStyle(short color) {Font font = workbook.createFont();//设置粗体font.setBold(true);CellStyle titleStyle = workbook.createCellStyle();titleStyle.setFont(font);//下边框//    titleStyle.setBorderBottom(BorderStyle.THIN);//左边框//    titleStyle.setBorderLeft(BorderStyle.THIN);//上边框//   titleStyle.setBorderTop(BorderStyle.THIN);//右边框//    titleStyle.setBorderRight(BorderStyle.THIN);//水平居中titleStyle.setAlignment(HorizontalAlignment.CENTER);//上下居中titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);//设置自动换行titleStyle.setWrapText(true);return titleStyle;}@Overridepublic CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) {CellStyle style = workbook.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);style.setDataFormat(STRING_FORMAT);if (isWarp) {style.setWrapText(true);}return style;}@Overridepublic CellStyle getHeaderStyle(short color) {CellStyle titleStyle = workbook.createCellStyle();Font font = workbook.createFont();font.setFontHeightInPoints((short) 12);titleStyle.setFont(font);titleStyle.setAlignment(HorizontalAlignment.CENTER);titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);return titleStyle;}@Overridepublic CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) {CellStyle style = workbook.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);style.setDataFormat(STRING_FORMAT);if (isWarp) {style.setWrapText(true);}return style;}
    }
  4. 导入实现
    说明:首先根据条件查出的该类对应的集合,因为某些属性不需要,然后循环,并赋值给对应的单选、多选、判断集合

    @PostMapping("/export")@RequiresPermissions("question:export")public void exportFile(@RequestBody Map<Object, Object> params, HttpServletResponse response) {Integer type = (Integer) params.get("quType");String content = (String) params.get("content");String panoramaId1 = (String) params.get("panoramaId");Integer level = (Integer) params.get("level");Long panoramaId = null;if (StringUtils.isNotBlank(panoramaId1)) {panoramaId = Long.valueOf(panoramaId1);}// 单选题集合List<QuestionTemplate> radioList = null;// 多选题集合List<QuestionTemplate> multipleList = null;// 判断题集合List<QuestionTemplate> judgeList = null;if (type != null) {if (type == 1) {radioList = questionService.exportQuestion(1,content,panoramaId,level);} else if (type == 2) {multipleList = questionService.exportQuestion(2,content,panoramaId,level);} else {judgeList = questionService.exportQuestion(3,content,panoramaId,level);}} else {// 全部导出radioList = questionService.exportQuestion(1,content,panoramaId,level);multipleList = questionService.exportQuestion(2,content,panoramaId,level);judgeList = questionService.exportQuestion(3,content,panoramaId,level);}// 单选集合List<SheetRadioExcel> radioExcelList = new ArrayList<>();// 多选集合List<SheetMultipleExcel> multipleExcelList = new ArrayList<>();// 判断集合List<SheetJudgeExcel> judgeExcelList = new ArrayList<>();if (radioList != null && radioList.size() > 0) {radioList.stream().forEach(radioQuestion -> {SheetRadioExcel radioExcel = new SheetRadioExcel();radioExcel.setContent(radioQuestion.getContent());// 根据问题id查询选项集合List<String> answers = questionAnswerService.listQuestionAnswerByQuestionId(radioQuestion.getQuestionId());if (answers != null && answers.size() > 0) {radioExcel.setOptionA(answers.get(0));radioExcel.setOptionB(answers.get(1));radioExcel.setOptionC(answers.get(2));radioExcel.setOptionD(answers.get(3));}// 根据问题id查询正确答案集合List<String> rightAnswers = questionAnswerService.getRightAnswersByQuestionId(radioQuestion.getQuestionId());radioExcel.setRightContent(rightAnswers.get(0));radioExcelList.add(radioExcel);});}if (multipleList != null && multipleList.size() > 0) {multipleList.stream().forEach(multipleQuestion -> {SheetMultipleExcel multipleExcel = new SheetMultipleExcel();multipleExcel.setContent(multipleQuestion.getContent());// 根据问题id查询选项集合List<String> answers = questionAnswerService.listQuestionAnswerByQuestionId(multipleQuestion.getQuestionId());if (answers != null && answers.size() > 0) {multipleExcel.setOptionA(answers.get(0));multipleExcel.setOptionB(answers.get(1));multipleExcel.setOptionC(answers.get(2));multipleExcel.setOptionD(answers.get(3));}// 根据问题id查询正确答案集合List<String> rightAnswers = questionAnswerService.getRightAnswersByQuestionId(multipleQuestion.getQuestionId());multipleExcel.setRightContent(StringUtils.join(rightAnswers.toArray(), "*"));multipleExcelList.add(multipleExcel);});}if (judgeList != null && judgeList.size() > 0) {judgeList.stream().forEach(judgeQuestion -> {SheetJudgeExcel judgeExcel = new SheetJudgeExcel();judgeExcel.setContent(judgeQuestion.getContent());// 根据问题id查询选项集合List<String> answers = questionAnswerService.listQuestionAnswerByQuestionId(judgeQuestion.getQuestionId());if (answers != null && answers.size() > 0) {judgeExcel.setJudgeA(answers.get(0));judgeExcel.setJudgeB(answers.get(1));}// 根据问题id查询正确答案集合List<String> rightAnswers = questionAnswerService.getRightAnswersByQuestionId(judgeQuestion.getQuestionId());judgeExcel.setRightContent(rightAnswers.get(0));judgeExcelList.add(judgeExcel);});}//功能描述:把同一个表格多个sheet测试结果重新输出,Workbook workBook = null;try {// 创建参数对象(用来设定excel的sheet1内容等信息)ExportParams radioExportParams = new ExportParams();// 设置sheet得名称radioExportParams.setSheetName("单选题");// 设置sheet表头名称radioExportParams.setTitle("单选题");radioExportParams.setStyle(ExcelExportTitleStyle.class);// 创建sheet1使用得mapMap<String, Object> radioExportMap = new HashMap<>();// title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetNameradioExportMap.put("title", radioExportParams);// 模版导出对应得实体类型radioExportMap.put("entity", SheetRadioExcel.class);// sheet1中要填充得数据radioExportMap.put("data", radioExcelList);// 创建参数对象(用来设定excel的sheet2内容等信息)ExportParams multipleExportParams = new ExportParams();multipleExportParams.setTitle("多选题");multipleExportParams.setSheetName("多选题");multipleExportParams.setStyle(ExcelExportTitleStyle.class);// 创建sheet2使用的mapMap<String, Object> multipleExportMap = new HashMap<>();multipleExportMap.put("title", multipleExportParams);multipleExportMap.put("entity", SheetMultipleExcel.class);// sheet2中要填充得数据multipleExportMap.put("data", multipleExcelList);// 创建参数对象(用来设定excel的sheet3内容等信息)ExportParams judgeExportParams = new ExportParams();judgeExportParams.setTitle("判断题");judgeExportParams.setSheetName("判断题");judgeExportParams.setStyle(ExcelExportTitleStyle.class);// 创建sheet3使用的mapMap<String, Object> judgeExportMap = new HashMap<>();judgeExportMap.put("title", judgeExportParams);judgeExportMap.put("entity", SheetJudgeExcel.class);// sheet3中要填充得数据judgeExportMap.put("data", judgeExcelList);// 将sheet1、sheet2、sheet3使用得map进行包装List<Map<String, Object>> sheetsList = new ArrayList<>();//后续增加sheet组,则后面继续追加即可;sheetsList.add(radioExportMap);sheetsList.add(multipleExportMap);sheetsList.add(judgeExportMap);// 执行方法workBook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);//设置编码格式response.setCharacterEncoding(StandardCharsets.UTF_8.name());//设置内容类型response.setContentType("application/octet-stream");//设置头及文件命名。response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("试题列表.xls", StandardCharsets.UTF_8.name()));//写出流workBook.write(response.getOutputStream());}catch (Exception e){}finally {if (workBook != null) {try {//强行关流workBook.close();} catch (IOException e) {e.printStackTrace();}}}}
    

springboot集成easypoi实现excel多sheet导出,并设置表头样式相关推荐

  1. SpringBoot集成EasyPoi实现Excel导入导出

    作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...

  2. SpringBoot 系列教程(十三):SpringBoot集成EasyPoi实现Excel导入导出

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点人工智能教程可以跳转到教程. easyp ...

  3. easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...

  4. EasyPoi实现excel文件导入导出

    EasyPoi学习实践 1 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板 ...

  5. PhpSpreadsheet 实现Excel多sheet导出

    如图 最近要做一个这样的导出,一个团长对应一个sheet,然后一键导出 使用PhpOffice\PhpSpreadsheet实现   直接上代码 /*** 多sheet的导出* @author bwy ...

  6. PHPword 导出word设置不同样式

    ** PHPword 导出word设置不同样式 ** 1.先看需求样子: 2.先用composer下载phpword到你的项目中,如果不会可以到网上搜,教程很多: 3. 引入,然后设置下全局字体字号, ...

  7. 集成easypoi实现excel图片导出

    我们先来看一眼,跟着本文实现下来的最终效果.如下图所示: 一.引入pom依赖 实现excel图片导出,我们还是得依赖于easypoi来做.所以你们只需要在你们的pom.xml依赖中加上如下easypo ...

  8. PhpSpreadsheet处理Excel 导入、导出并设置样式

    PhpSpreadsheet处理Excel PHPOffice 是一个用来处理办公相关软件的php类库 PhpSpreadsheet 专门处理excle的类库 导出如下: 引入类库 composer ...

  9. Easy Excel生成压缩包文件,自定义表头样式

    Excel 文件内容形如下图! 需求场景 导出超10w左右的数据,涉及 源数据查. 组装业务数据 解析数据库中的json数据内容,并组装相应的信息 生成Excel文件内容到磁盘 将文件压缩,并写回到浏 ...

  10. SpringBoot集成logback彩色日志配置以及banner启动设置(炫酷到爆炸!)

    文章目录 前言 一.banner配置 1.1 banner图像在线生成工具 1.2 banner配置颜色 1.3 banner启动状态控制 二.logback彩色日志配置 2.1 引入依赖 2.2 l ...

最新文章

  1. Visual Basic 2005 - 如何将色彩字符串转换成 Color 结构
  2. ogr 缓冲区_GDAL的几何操作
  3. 开发composer包
  4. 汇编语言之转移指令和原理
  5. 【转】DICOM通信 - PDU数据包(2)
  6. kettle同步数据到hive 巨慢_超详细教程,kettle ETL mysql到hadoop hive数据抽取,值得收藏...
  7. 使用electron-vue创建项目卡顿的问题
  8. android9获取蓝牙地址,Android获取本机蓝牙地址
  9. mysql char最大长度_MySQL中的CHAR和VARCHAR到底支持多长?
  10. php vendor 删除,composer update删除第三方库的问题
  11. db9针232接口波特率标准_DB9 公头母头引脚定义及连接
  12. 卸载adobe系列产品工具
  13. 第二届广东大学生网络安全攻防大赛 个人向Write Up
  14. 云通信接口更新迭代——SUBMAIL API V4正式上线
  15. Mac新手需要知道的显示桌面的快捷方式
  16. python图像算法,Zhang-Suen 图像细化算法python实现
  17. EDIUS是怎么制作快节奏字幕的
  18. 智慧仓储:打造仓储管理一张图
  19. Matplotlib文字处理
  20. 长度单位换算python_长度单位换算表-在线长度单位转换器

热门文章

  1. php怎么接入微支付宝支付,php 微信公众号接入支付宝支付
  2. 如何设置excel为0的单元格内容为不显示
  3. scrapy爬虫总结
  4. python股票成交明细_AkShare-股票数据-龙虎榜-机构席位成交明细
  5. 使用VGG16.npy文件载入权重
  6. 计算机硬盘的内存单位换算,内存的单位换算
  7. JAVA根据地点获取经纬度
  8. ping命令显示时间
  9. 第三方支付平台-框架介绍
  10. 腾讯云 鉴权失败,请确认服务器已启用密码鉴权并且账号密码正确? permission denied (publickey,gssapi-keyex,gssapi-with-mic)