springboot集成easypoi实现excel多sheet导出,并设置表头样式
springboot集成easypoi实现excel多sheet导出,并设置表头样式
导入依赖
<!--easypoi依赖,excel导入导出--> <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.3.0</version> </dependency>
导出实体类
// 单选 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; }
表头样式类
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;} }
导入实现
说明:首先根据条件查出的该类对应的集合,因为某些属性不需要,然后循环,并赋值给对应的单选、多选、判断集合@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导出,并设置表头样式相关推荐
- SpringBoot集成EasyPoi实现Excel导入导出
作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...
- SpringBoot 系列教程(十三):SpringBoot集成EasyPoi实现Excel导入导出
"无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点人工智能教程可以跳转到教程. easyp ...
- easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能
Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...
- EasyPoi实现excel文件导入导出
EasyPoi学习实践 1 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板 ...
- PhpSpreadsheet 实现Excel多sheet导出
如图 最近要做一个这样的导出,一个团长对应一个sheet,然后一键导出 使用PhpOffice\PhpSpreadsheet实现 直接上代码 /*** 多sheet的导出* @author bwy ...
- PHPword 导出word设置不同样式
** PHPword 导出word设置不同样式 ** 1.先看需求样子: 2.先用composer下载phpword到你的项目中,如果不会可以到网上搜,教程很多: 3. 引入,然后设置下全局字体字号, ...
- 集成easypoi实现excel图片导出
我们先来看一眼,跟着本文实现下来的最终效果.如下图所示: 一.引入pom依赖 实现excel图片导出,我们还是得依赖于easypoi来做.所以你们只需要在你们的pom.xml依赖中加上如下easypo ...
- PhpSpreadsheet处理Excel 导入、导出并设置样式
PhpSpreadsheet处理Excel PHPOffice 是一个用来处理办公相关软件的php类库 PhpSpreadsheet 专门处理excle的类库 导出如下: 引入类库 composer ...
- Easy Excel生成压缩包文件,自定义表头样式
Excel 文件内容形如下图! 需求场景 导出超10w左右的数据,涉及 源数据查. 组装业务数据 解析数据库中的json数据内容,并组装相应的信息 生成Excel文件内容到磁盘 将文件压缩,并写回到浏 ...
- SpringBoot集成logback彩色日志配置以及banner启动设置(炫酷到爆炸!)
文章目录 前言 一.banner配置 1.1 banner图像在线生成工具 1.2 banner配置颜色 1.3 banner启动状态控制 二.logback彩色日志配置 2.1 引入依赖 2.2 l ...
最新文章
- Visual Basic 2005 - 如何将色彩字符串转换成 Color 结构
- ogr 缓冲区_GDAL的几何操作
- 开发composer包
- 汇编语言之转移指令和原理
- 【转】DICOM通信 - PDU数据包(2)
- kettle同步数据到hive 巨慢_超详细教程,kettle ETL mysql到hadoop hive数据抽取,值得收藏...
- 使用electron-vue创建项目卡顿的问题
- android9获取蓝牙地址,Android获取本机蓝牙地址
- mysql char最大长度_MySQL中的CHAR和VARCHAR到底支持多长?
- php vendor 删除,composer update删除第三方库的问题
- db9针232接口波特率标准_DB9 公头母头引脚定义及连接
- 卸载adobe系列产品工具
- 第二届广东大学生网络安全攻防大赛 个人向Write Up
- 云通信接口更新迭代——SUBMAIL API V4正式上线
- Mac新手需要知道的显示桌面的快捷方式
- python图像算法,Zhang-Suen 图像细化算法python实现
- EDIUS是怎么制作快节奏字幕的
- 智慧仓储:打造仓储管理一张图
- Matplotlib文字处理
- 长度单位换算python_长度单位换算表-在线长度单位转换器
热门文章
- php怎么接入微支付宝支付,php 微信公众号接入支付宝支付
- 如何设置excel为0的单元格内容为不显示
- scrapy爬虫总结
- python股票成交明细_AkShare-股票数据-龙虎榜-机构席位成交明细
- 使用VGG16.npy文件载入权重
- 计算机硬盘的内存单位换算,内存的单位换算
- JAVA根据地点获取经纬度
- ping命令显示时间
- 第三方支付平台-框架介绍
- 腾讯云 鉴权失败,请确认服务器已启用密码鉴权并且账号密码正确? permission denied (publickey,gssapi-keyex,gssapi-with-mic)