当前位置: 首页 > news >正文

EasyPoi的excel模板预览与下载、导出简单/复杂数据

官方文档地址:easypoi官网,官方仅供参考,部分描述有问题

excel模板预览

准备工作

事先将整理好的excel模板存在项目中,如图
在这里插入图片描述

excel模板预览代码

	@GetMapping("excel")@ApiOperation("excel预览")@NoLogpublic void excel07(HttpServletResponse response) throws IOException {//读取文件 templates/学生信息表.xlsx是相对路径InputStream inputStream = POICacheManager.getFile("templates/学生信息表.xlsx");//创建工作簿Workbook workbook = WorkbookFactory.create(inputStream);//设置为true防止中文乱码 sheetNum默认从0开始ExcelToHtmlParams params=new ExcelToHtmlParams(workbook,true,0,"");//解析成htmlString excelToHtml = ExcelXorHtmlUtil.excelToHtml(params);response.getOutputStream().write(excelToHtml.getBytes());}

excel模板下载

准备工作

事先将整理好的excel模板存在项目中,如图
在这里插入图片描述

excel模板下载代码

	@GetMapping("downTemplate")@ApiOperation("下载模板")@NoLogpublic void downTemplate(HttpServletResponse response) throws IOException {//指定下载模板的哪个sheet页 templates/学生信息表.xlsx是相对路径TemplateExportParams template=new TemplateExportParams("templates/学生信息表.xlsx","模板2");//保证模板里面没有域占位行HashMap hashMap = new HashMap();hashMap.put("mapList",Lists.newArrayList());Workbook workbook = ExcelExportUtil.exportExcel(template,hashMap);ExcelUtils.exportExcel(response,workbook,"学生信息模板表.xlsx");}

excel模板导出简单数据代码

可以用模板指令设置导出内容的

准备工作

在这里插入图片描述
注:模板指令如下:
空格分割
三目运算 {{test ? obj:obj2}}
n: 表示 这个cell是数值类型 {{n:}}
le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
fn: 格式化数字 {{fn:(obj;###.00)}}
fe: 遍历数据,创建row
!fe: 遍历数据不创建row
$fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
#fe: 横向遍历
v_fe: 横向遍历值
!if: 删除当前列 {{!if:(test)}}
单引号表示常量值 ‘’ 比如’1’ 那么输出的就是 1
&NULL& 空格
&INDEX& 表示循环中的序号,自动添加
]] 换行符 多行遍历导出
sum: 统计数据
cal: 基础的±X% 计算
dict: 字典
i18n: 国际化

excel模板导出简单数据代码

	@GetMapping("exportDataSimple")@ApiOperation("模板导出数据-简单")@NoLogpublic void exportDataSimple(HttpServletResponse response) throws IOException {TemplateExportParams template=new TemplateExportParams("templates/学生信息表.xlsx");String [] sexArr=new String[]{"男","女"};String [] subArr=new String[]{"语文","数学","英语"};List<Map<String,Object>> list= Lists.newArrayList();Map<String,Object> contentMap;for (int i = 0; i < NUM; i++) {contentMap=Maps.newHashMap();contentMap.put("name",UUID.randomUUID().toString());contentMap.put("sex",sexArr[i%2]);contentMap.put("age", new Random().nextInt(90)+10);contentMap.put("subject",subArr[i%3]);contentMap.put("score", ThreadLocalRandom.current().nextInt(40)+60);list.add(contentMap);}Map<String,Object> map= Maps.newHashMap();map.put("mapList", list);map.put("class", "一年级");map.put("date", new Date());Workbook workbook = ExcelExportUtil.exportExcel(template, map);ExcelUtils.exportExcel(response,workbook,"学生数据.xlsx");}

一些模板导出知识参考

注意事项以及常见错误参考
springboot集成easypoi并使用其模板导出功能和遇到的坑
详细easypoi导出参考
EasyPoi基本用法

excel模板导出复杂数据

用不了模板指令设置导出内容的,样式中性别那一列有下拉框,通过模板指令设置不了,所以考虑手动插入数据

excel模板导出复杂数据代码

	@GetMapping("exportDataComplex")@ApiOperation("模板导出数据-复杂")@NoLogpublic void exportDataComplex(HttpServletResponse response) throws IOException {//读取模板TemplateExportParams template=new TemplateExportParams("templates/学生信息表.xlsx",1);//模拟数据String [] sexArr=new String[]{"男","女"};String [] subArr=new String[]{"语文","数学","英语"};List<StudentTemplate> list=Lists.newArrayList();StudentTemplate student;for (int i = 0; i < NUM; i++) {student=new StudentTemplate();student.setId(i+1);student.setName(UUID.randomUUID().toString());student.setAge(new Random().nextInt(90)+10);student.setSex(sexArr[i%2]);student.setSubject(subArr[i%3]);student.setScore(ThreadLocalRandom.current().nextInt(40)+60);list.add(student);}Map<String,Object> map= Maps.newHashMap();map.put("class", "一年级");map.put("date", new Date());//导出工作簿Workbook workbook = ExcelExportUtil.exportExcel(template, map);//获取第一个sheet页Sheet sheet = workbook.getSheetAt(0);//设置列宽自适应for (int i = 0; i < 6 ; i++) {sheet.autoSizeColumn(i);sheet.setColumnWidth(i,sheet.getColumnWidth(i)*17/10);}//设置指定列宽sheet.setColumnWidth(1,21*256);//数据首行int num = sheet.getLastRowNum();//行Row row;//列Cell cell;StudentTemplate studentTemplate;//单元格样式CellStyle cellStyle = ExcelUtils.setCellStyle(workbook);//写入数据for (int i = num; i < NUM+num; i++) {row= sheet.createRow(i);studentTemplate = list.get(i - num);for (int j = 0; j < 6; j++) {cell= row.createCell(j);cell.setCellStyle(cellStyle);if (j==0) {cell.setCellValue(studentTemplate.getId());}else if(j==1){cell.setCellValue(studentTemplate.getName());}else if(j==2){cell.setCellValue(studentTemplate.getAge());}else if(j==3){cell.setCellValue(studentTemplate.getSex());}else if(j==4){cell.setCellValue(studentTemplate.getSubject());}else if(j==5){cell.setCellValue(studentTemplate.getScore());}}}ExcelUtils.exportExcel(response,workbook,"学生数据.xlsx");}

附录

ExcelUtils类

import org.apache.poi.ss.usermodel.*;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;/*** excel工具类* @author leishen*/
public class ExcelUtils {/*** 下载文件到客户端* @param response* @param workbook* @param fileName 文件名* @throws IOException*/public static void exportExcel(HttpServletResponse response, Workbook workbook, String fileName) throws IOException {response.setCharacterEncoding("UTF-8");// 设置响应输出的头类型response.setHeader("content-Type", "application/vnd.ms-excel");// 下载文件的默认名称response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));OutputStream out = response.getOutputStream();workbook.write(out);out.flush();out.close();}/*** 设置单元格样式* @param workbook*/public static CellStyle setCellStyle(Workbook workbook){CellStyle cellStyle = workbook.createCellStyle();//水平居中cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//上边框cellStyle.setBorderTop(BorderStyle.THIN);//下边框cellStyle.setBorderBottom(BorderStyle.THIN);//左边框cellStyle.setBorderLeft(BorderStyle.THIN);//右边框cellStyle.setBorderRight(BorderStyle.THIN);//设置字体Font font = workbook.createFont();font.setFontName("宋体");//设置样式cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());cellStyle.setFont(font);//设置自动换行cellStyle.setWrapText(true);return cellStyle;}
}
http://www.lryc.cn/news/27182.html

相关文章:

  • 收个滴滴Offer:从小伙三面经历,看看需要学点啥?
  • Spark Shuffle解析
  • Qt 解决程序全屏运行弹窗引发任务栏显示
  • 【进阶】2、搭建K8s集群【v1.23】
  • 11面向接口编程(下):一切皆服务,服务基于协议
  • 不要以没时间来说测试用例写不好
  • day57-day58【代码随想录】二刷数组
  • 【NLP】自动化计算文本文件TTR的bash脚本
  • 蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)
  • Ubuntu 新人上手 Microk8s 指南
  • 初阶C语言——实用调试技巧【详解】
  • Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)
  • js拷贝数组对象:浅拷贝深拷贝
  • 【C++】string类的使用
  • 微服务架构简介
  • 【Spring源码】AOP的开端:核心对象创建的准备工作
  • 新号涨粉22w,搞笑博主再次爆火,小红书近期创作趋势是什么?
  • 【C++】30h速成C++从入门到精通(内存管理、函数/类模板)
  • 自动驾驶决策概况
  • 金山轻维表项目进展自动通知
  • 基于上下文分析的 Python 实时 API 推荐
  • 软件测试-接口测试-代码实现接口测试
  • 中村成洋《垃圾回收的算法与实现》PDF 读书笔记
  • docker 网络模式
  • 数据库开发(一文概括mysql基本知识)
  • 【JVM】详解Java内存区域和分配
  • JAVA开发(史上最完整追本溯源JAVA历史、发展和学习)
  • Qt 防止程序退出
  • 【校验码 - 循环冗余校验码CRC】
  • 【Rust】一文讲透Rust中的PartialEq和Eq