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

news2024/12/29 8:59:08

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

excel模板预览

准备工作

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

excel模板预览代码

	@GetMapping("excel")
    @ApiOperation("excel预览")
    @NoLog
    public 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,"");
        //解析成html
        String excelToHtml = ExcelXorHtmlUtil.excelToHtml(params);
        response.getOutputStream().write(excelToHtml.getBytes());
    }

excel模板下载

准备工作

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

excel模板下载代码

	@GetMapping("downTemplate")
    @ApiOperation("下载模板")
    @NoLog
    public 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("模板导出数据-简单")
    @NoLog
    public 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("模板导出数据-复杂")
    @NoLog
    public 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.coloradmin.cn/o/385560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件

目录前言校验思路1、存储方式2、实现图一实现图二实现结果最后前言 不知道大家有没有做过这种需求&#xff1a;在某字符串中&#xff0c;根据多个关键字去判断这串字符串是否满足条件。如下图&#xff1a; 亦或是 如果说要根据图二的关键字去数据库中查询符合条件的数据&a…

QT基础(18)- QAbstractSocket

QT基础&#xff08;18&#xff09;- QAbstractSocket1 创建简单的客户端2 QAbstractSocket2.1 简介2.2 枚举2.2.1 BingFlag2.2.2 NetworkLayerProtocol2.2.3 PauseMode2.2.4 SocketError2.2.5 SocketOption2.2.6 SocketType2.2.7 SocketState2.3 公有函数2.3.1 构造函数2.3.2 a…

文献阅读(47)—— 遗传数据研究近视和眼压与视网膜脱落的关系

文献阅读&#xff08;47&#xff09;—— 遗传数据研究近视和眼压与视网膜脱落的关系 文章目录文献阅读&#xff08;47&#xff09;—— 遗传数据研究近视和眼压与视网膜脱落的关系遗传数据研究近视和眼压与视网膜脱落的关系先验知识/知识拓展文章结构文章结果1. 视网膜脱落风险…

centos8安装docker运行java文件

本文由个人总结&#xff0c;如需转载使用请标明原著及原文地址 这里是基于我前一篇搭的centos8服务器做的&#xff0c;如果yum baseos源或appstream源有问题可以去看看前一篇 https://blog.csdn.net/qq_36911145/article/details/129263830 1.安装docker 1.1配置docker yum…

惠普战66pro如何选购内存条?一篇文章讲解清楚

笔记本&#xff1a;惠普 ZHAN66 PRO CPU&#xff1a;Intel Core™ i-8565U CPU 1.80GHz 内存条&#xff1a;Samsung PS: 如果有需要更换硬盘的可以看我之前发的文章&#xff0c;博主进行了长时间的测试。 硬盘选购长测评 文章目录前言一、内存是什么&#xff1f;二、如何操作呢…

错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案

近日&#xff0c;在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候&#xff0c;出现了如下错误&#xff1a; 其中项目开源地址是&#xff1a;https://github.com/toandaominh1997/EfficientDet.Pytorch 上面截图中的1和2代表我的类别名称。读者可…

【计算机二级python】综合题题目

计算机二级python真题 文章目录计算机二级python真题一、八十天环游世界二、八十天环游世界 问题一二、八十天环游世界 问题二一、八十天环游世界 附件中保存1个文本文件&#xff0c;分别对应2个问题‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬…

315线上知识竞赛答题活动方案及模板分享

315线上知识竞赛答题活动方案及模板分享在315国际消费者权益日来临之际&#xff0c; 很多单位推出有奖知识竞答&#xff0c; 希望大家在了解专业知识的同时&#xff0c; 还可以拿到自己喜欢的奖品&#xff01;这是消费者委员会和监管局联合举办的“315消费知识在线有奖竞答”活…

Springboot怎么集成Thymeleaf模板引擎?

Thymeleaf介绍Thymeleaf&#xff0c;是一个XML/XHTML/HTML模板引擎&#xff0c;开源的java库&#xff0c;可以用于SpingMVC项目中&#xff0c;用于代替JSP、FreeMarker或者其他的模板引擎&#xff1b;页面与数据分离&#xff0c;提高了开发效率&#xff0c;让代码重用更容易。S…

【JavaScript速成之路】JavaScript流程控制

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录前言1&#xff0c;流程控制2&#xff0c;分支结构2.1&#xff0c;if语句2.2&…

时机将至,名创优品或将再掀起一波消费热浪

北京时间2月28日&#xff0c;名创优品发布2023财年中报&#xff0c;财报显示&#xff0c;2023财年第二季度营收规模有所收窄&#xff0c;但净利润、毛利率、门店数量均实现了不错的增长&#xff0c;总体表现可圈可点。 &#xff08;资料来源&#xff1a;富途牛牛&#xff09; …

PIC单片机的快速代码生成和调试过程

1.相关工具说明&#xff1a;MCC ...................................Pic的代码模板软原始安装包&#xff1a;mcc-installer-5.2.2-windows.exeMPLAB X IDE ........................... 集成开发环境原始安装包&#xff1a;MPLABX-v6.00-windows-installer.exe编译环境&#x…

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测 目前目标检测算法有很多&#xff0c;流行的就有faster-rnn和yolov&#xff0c;本文使用了几年前的yolov3框架进行训练&#xff0c;效果还是很好&#xff0c;当然也可以使用更高版本的Yolov进行实战。本代码使…

八股总结(一)C++语法、内存管理、新标准、STL

layout: post title: 八股总结&#xff08;一&#xff09;C语法、内存管理、新标准、STL description: 八股总结&#xff08;一&#xff09;C语法、内存管理、新标准、STL tag: C 文章目录基础语法语言特性面向对象的三大特性&#xff1f;C中新增了string&#xff0c;它与C语言…

Acwing---843. n-皇后问题

n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 …

数据库调优策略

1.数据库调优的措施 1.1.调优的目标 尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务。(吞吐量更大)合理的结构设计和参数调整&#xff0c;以提高用户操作 响应的速度。(响应速度更快)减少系统的瓶颈&#xff0c;提高MySQL数据库整体的性能 1.2.如何定位调优…

Qt 绘制图表 - Qt Charts版

一、前言 自从 Qt 发布以来&#xff0c;给广大跨平台界面研发人员带来了无数的福利。但是Qt自己却一直没有提供自带的图表库&#xff0c;这就使得 QWT、QCustomPlot 等第三方图表库有了巨大的生存空间&#xff0c;为了降低开发成本&#xff0c;大家都涌向了这些第三方库。这种…

appium的安装详解

安装appium 爬虫手机APP需要实现自动化&#xff0c;所以要使用appnium来实现点击&#xff0c;输入&#xff0c;滑动等操作。由于appnium的安装较为繁琐&#xff0c;所以特意整理一篇文章来展示安装的详细过程过程中。 安装appnium共有3个步骤 安装 Android SDK安装 JDK安装 …

W800系列|ST-LINK|STM32最小版|HEX文件|CKLINK|DebugServer|学习(3):自制cklink调试工具

硬件准备 1.stm32最小系统板&#xff1a;stm32c8t6 2.stlink下载器&#xff1a;stlink v2版本 软件安装&#xff1a; 1、STM32 ST-LINK Utility&#xff08;官网下载&#xff09; 2、csky IDE: 剑池CDK集成开发环境V2.18.2 https://occ.t-head.cn/community/download?id…

链接投票二维码制作制作投票链接视频选举投票制作

关于微信投票&#xff0c;我们现在用的最多的就是小程序投票&#xff0c;今天的网络投票&#xff0c;在这里会教大家如何用“活动星投票”小程序来进行投票。我们现在要以“信赖挚友”为主题进行一次投票活动&#xff0c;我们可以在在微信小程序搜索&#xff0c;“活动星投票”…