springboot整合jett实现模板excel数据导出

2023-11-13

一 jett的介绍

1.1 介绍

jett是使用Excel电子表格模板快速创建Excel电子表格报告的工具。

1.2 使用方式

1.使用${}来标识我们需要填充的数据

2.使用<jt></jt> 遍历一个集合,我们对集合的每个元素取名为e ,每个元素的又可以使用${e.属性}来进行获取。

1.后端代码

 public  void test(){
        List<Student> studentsList=new ArrayList<>();
        //  List<Map> studentsList=new ArrayList<>();
        for(int k=0;k<5;k++){
            studentsList.add(new Student(k,"张三"+k,(k+1)*2));
           // resultMap.put("dataList",studentsList);
        }
    }

2.模板图 

3.导出数据:

 

 二 jett的案例操作

2.1 模板案例

2.2 代码实现

1.工程结构

 2.代码

package com.ljf.jett.demo.controller;

import com.ljf.jett.demo.model.Student;
import com.ljf.jett.demo.util.DateUtils;
import net.sf.jett.transform.ExcelTransformer;
import org.apache.poi.ss.usermodel.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.*;

/**
 * @ClassName: SkMonthsReportController
 * @Description: TODO  导出测试类
 * @Author: liujianfu
 * @Date: 2022/11/08 10:22:23 
 * @Version: V1.0
 **/
@RestController
@CrossOrigin
@RequestMapping("/test")
public class SkMonthsReportController {
    @RequestMapping("/export")
    public void  exportDataForExcel(HttpServletResponse response) {
        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put("titleName","邵寨煤业公司选煤厂调度日报表");
        resultMap.put("reportDate", DateUtils.dateToStr(new Date(),"yyyy-MM-dd"));
        //中间列表
        //当班量
        Map<String,Object> currentDutyMap=new HashMap<>();
        currentDutyMap.put("rxCoal",7664);
        currentDutyMap.put("blockCoal",1576);
        currentDutyMap.put("wyCoal",0);
        currentDutyMap.put("wjCoal",3102);
        currentDutyMap.put("zongCoal",693);
        currentDutyMap.put("dryCoal",598);
        currentDutyMap.put("wetCoal",1);
        currentDutyMap.put("stone",0);
        currentDutyMap.put("mark","");
        resultMap.put("currentDutyMap",currentDutyMap);
        //回收率
        Map<String,Object> recycleMap=new HashMap<>();
        recycleMap.put("rxCoal",7664);
        recycleMap.put("blockCoal",1576);
        recycleMap.put("wyCoal",0);
        recycleMap.put("wjCoal",3102);
        recycleMap.put("zongCoal",693);
        recycleMap.put("dryCoal",598);
        recycleMap.put("wetCoal",1);
        recycleMap.put("stone",0);
        recycleMap.put("mark","精煤产率61.04");
        resultMap.put("recycleMap",recycleMap);
        //月类量
        Map<String,Object> monthMap=new HashMap<>();
        monthMap.put("rxCoal",7664);
        monthMap.put("blockCoal",1576);
        monthMap.put("wyCoal",0);
        monthMap.put("wjCoal",3102);
        monthMap.put("zongCoal",693);
        monthMap.put("dryCoal",598);
        monthMap.put("wetCoal",1);
        monthMap.put("stone",0);
        monthMap.put("mark","");
        resultMap.put("monthMap",monthMap);
        //年累量
        Map<String,Object> yearMap=new HashMap<>();
        yearMap.put("rxCoal",7664);
        yearMap.put("blockCoal",1576);
        yearMap.put("wyCoal",0);
        yearMap.put("wjCoal",3102);
        yearMap.put("zongCoal",693);
        yearMap.put("dryCoal",598);
        yearMap.put("wetCoal",1);
        yearMap.put("stone",0);
        yearMap.put("mark","");
        resultMap.put("yearMap",yearMap);

       //汇总栏
        resultMap.put("waitCoalTime",45.6);
        resultMap.put("productTime",34.2);
        resultMap.put("productCoalTime",1234.2);
      //阐述
        StringBuffer sb=new StringBuffer();
        sb.append("1.主洗各筛机筛板、轨座及固定筛检查更换。\r\n");
        sb.append("2.事故池更换508潜水泵。\r\n");
        sb.append("3.主洗车间二楼372粗中煤泥刮板机紧固链条。\r\n");
        sb.append("4.主洗车间三楼半307浅槽分选机紧固底板螺丝。\r\n");
        sb.append("5.产品仓上804块精煤皮带更换挡皮。\r\n");
        resultMap.put("checkItem",sb.toString());
       //仓库
        Map<String,Object>  coalHouse=new HashMap<>();
        coalHouse.put("yhouse",1);
        coalHouse.put("j1house",2);
        coalHouse.put("j2house",3);
        coalHouse.put("y3house",4);
        coalHouse.put("z4house",4);
        coalHouse.put("b5house",5);
        coalHouse.put("checkTime",DateUtils.dateToStr(new Date(),"yyyy-MM-dd"));
        resultMap.put("coalHouse",coalHouse);
       //煤质监测
        //原煤质检
        Map<String,Object>  yCoalMap=new HashMap<>();
        yCoalMap.put("water",10.8);
        yCoalMap.put("gray",29.27);
        yCoalMap.put("sulfur",0.39);
        yCoalMap.put("energy",4681);
        resultMap.put("yCoalMap",yCoalMap);
        //块晶煤质检
        Map<String,Object>  blockCoalMap=new HashMap<>();
        blockCoalMap.put("water",10.8);
        blockCoalMap.put("gray",29.27);
        blockCoalMap.put("sulfur",0.39);
        blockCoalMap.put("energy",4681);
        resultMap.put("blockCoalMap",blockCoalMap);
        //未晶煤质检
        Map<String,Object>  wCoalMap=new HashMap<>();
        wCoalMap.put("water",10.8);
        wCoalMap.put("gray",29.27);
        wCoalMap.put("sulfur",0.39);
        wCoalMap.put("energy",4681);
        resultMap.put("wCoalMap",wCoalMap);
        //中煤质检
        Map<String,Object>  zongCoalMap=new HashMap<>();
        zongCoalMap.put("water",10.8);
        zongCoalMap.put("gray",29.27);
        zongCoalMap.put("sulfur",0.39);
        zongCoalMap.put("energy",4681);
        resultMap.put("zongCoalMap",zongCoalMap);
        //煤泥质检
        Map<String,Object>  niCoalMap=new HashMap<>();
        niCoalMap.put("water",10.8);
        niCoalMap.put("gray",29.27);
        niCoalMap.put("sulfur",0.39);
        niCoalMap.put("energy",4681);
        resultMap.put("niCoalMap",niCoalMap);
        //陨石质检
        Map<String,Object>  stoneCoalMap=new HashMap<>();
        stoneCoalMap.put("water",10.8);
        stoneCoalMap.put("gray",29.27);
        stoneCoalMap.put("sulfur",0.39);
        stoneCoalMap.put("energy",4681);
        resultMap.put("stoneCoalMap",stoneCoalMap);
     //生产统计
        //晚上
        Map<String,Object>  nightMap=new HashMap<>();
        nightMap.put("washTotal",2944);
        nightMap.put("white",2);
        nightMap.put("yellow",7);
        nightMap.put("liquid",8);
        resultMap.put("nightMap",nightMap);
        //中午
        Map<String,Object>  pmMap=new HashMap<>();
        pmMap.put("washTotal",2944);
        pmMap.put("white",2);
        pmMap.put("yellow",7);
        pmMap.put("liquid",8);
        resultMap.put("pmMap",pmMap);
        //早上
        Map<String,Object>  amMap=new HashMap<>();
        amMap.put("washTotal",2944);
        amMap.put("white",2);
        amMap.put("yellow",7);
        amMap.put("liquid",8);
        resultMap.put("amMap",amMap);
        //消耗统计
        //晚上
        Map<String,Object>  nightConsumeMap=new HashMap<>();
        nightConsumeMap.put("blockTotal",2944);
        nightConsumeMap.put("blockConsume",2);
        resultMap.put("nightConsumeMap",nightConsumeMap);
        //中午
        Map<String,Object>  pmConsumeMap=new HashMap<>();
        pmConsumeMap.put("blockTotal",2944);
        pmConsumeMap.put("blockConsume",2);
        resultMap.put("pmConsumeMap",pmConsumeMap);
        //早上
        Map<String,Object>  amConsumeMap=new HashMap<>();
        amConsumeMap.put("blockTotal",2944);
        amConsumeMap.put("blockConsume",2);
        resultMap.put("amConsumeMap",amConsumeMap);
        //最后阐述
        resultMap.put("endMark","介耗数据每天自行调整,按0.01-0.03范围波动调整");
        buildExcelReport( resultMap, response);
    }
    public  void test(){
        List<Student> studentsList=new ArrayList<>();
        //  List<Map> studentsList=new ArrayList<>();
        for(int k=0;k<5;k++){
            studentsList.add(new Student(k,"张三"+k,(k+1)*2));
           // resultMap.put("dataList",studentsList);
        }
    }
    /**
    * @author liujianfu
    * @description       封装excel
    * @date 2022/11/8 10:42
    * @param [resultMap]
    * @return void
    */
    public void  buildExcelReport(Map<String, Object> resultMap,HttpServletResponse response){
        String modelFile="d:/10-model.xlsx";
        try (InputStream is = new FileInputStream(new File(modelFile));) {
                Workbook workbook = new ExcelTransformer().transform(is, resultMap);
                buildExcelDocument("邵寨10月_"+System.currentTimeMillis()+".xlsx", workbook, response);


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
    * @author liujianfu
    * @description       数据流的输出
    * @date 2022/11/8 10:42
    * @param [filename, workbook, response]
    * @return void
    */
    protected static void buildExcelDocument(String filename, Workbook workbook, HttpServletResponse response)
            throws Exception {
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
        OutputStream outputStream = response.getOutputStream();
        workbook.write(outputStream);
        outputStream.flush();
        outputStream.close();
    }
}

3.导出效果

 代码地址:https://gitee.com/jurf-liu/jett-excel-demo.git

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot整合jett实现模板excel数据导出 的相关文章

  • 如何通过电子邮件发送 Excel 文件?

    我有一个 excel 文件 Excel 2003 xls 格式 我想用 c 通过电子邮件发送它 我的代码成功发送它 但是当我尝试打开响应文件时 它似乎编码错误 例如 这里是响应文件名 utf 8 B RWxzesOhbW9sw6FzXzIw
  • 具有多个实体查找器的通用 spring jpa 存储库

    我的应用程序有超过 250 个表 每个表都有 ID 和名称列 我正在尝试将我们的应用程序从 hibernate 3 迁移到带有 hibernate 5 的 Spring JPA 4 3 在我当前的休眠层中 我有 选项 1 public cl
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 是否存在用于开放 xml Excel 编辑的良好包装类和/或库?

    我正在寻找一个不错的库 用于在我们的 Windows 服务器上编辑和 或生成 Excel 文档 我觉得 open xml sdk 可能是可行的方法 但对我来说 学习曲线似乎很陡峭 而且我们的开发时间有限 我认为编辑 Excel 文档不应该那
  • 跳过行:将数据从 SSIS 导出到 Excel 文件

    我正在尝试使用 SSIS 将数据从 SQL Server 数据库导出到 Excel 文件中 我希望从第 6 行插入数据 第 5 行有标题 我可以映射标题名称Excel 目标编辑器 通过编写 SQL 命令到 SQL 表头 SELECT FRO
  • VBA Excel:将范围值分配给新范围

    我在将一个工作簿范围中的值分配给当前工作簿中的某个范围时遇到问题 当我使用 Range A1 C1 分配我的范围时 此代码工作正常 但是当我使用 Range Cells 1 1 Cells 1 3 定义我的范围时 该函数会失败 Sub Co
  • 保存 JPA 实体时出现 java.lang.StackOverflowError

    我正在使用 Spring JPA 将实体保存到数据库中 下面是代码结构 客户 java Entity Table name customer Data public class Customer Id GeneratedValue stra
  • 使用 python 中的公式函数使从 Excel 中提取的值的百分比相等

    import xlrd numpy excel Users Bob Desktop wb1 xlrd open workbook excel assignment3 xlsx sh1 wb1 sheet by index 0 colA co
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • 循环浏览文件夹中的工作簿

    我正在尝试从文件夹中的所有工作簿复制某些单元格 下面的代码仅循环遍历第一个文件 VBA 新手 欢迎任何帮助 提前致谢 Sub Get Data Dim Directory As String Dim Filename As String D
  • 将 CURL 命令行转换为 VBA

    在 CURL 中 我可以使用这一行 curl data DataToBeSent https example com resource cgi 我正在努力将此类行转换为在 VBA 中使用 这是我到目前为止的尝试 Sub POST Metho
  • 如何使用Excel的墨迹工具添加手写签名?

    我想在我公司的一些表格中添加手写数字签名 目标是选择一个文档 添加签名 通过使用绘图板 这可以使用 Excel 的墨水工具完成 并将文件作为 PDF 存储在服务器中 这将消除打印然后扫描表格以获得签名的必要性 我使用 Excel 作为文件操
  • VBA 中的 If 和 Or 多个语句

    我想将包含 14 列的 Excel 文件重新分配到正确的列 包含 12 000 行 为此 我必须使用一些 If And Or 语句将数字放入矩阵中 但显然我没有从中得到正确的东西 它使我的所有单元格为零 而具有值的单元格应保留该值 我哪里出
  • 将 Excel 数字日期重新格式化为 R 日期

    希望将从 Excel 中提取的列重新格式化为包含数字 Excel 格式 例如 40182 的数据框 as date 40182 origin 1899 12 30 format b Y Returns 1 2070 年 1 月 5 日 我正
  • 返回在 REST 控制器中包装 S3Object.getObjectContent() 的 ResponseEntity 是否安全?

    我正在开发一个 Spring Boot 应用程序 它应该允许用户通过指定的应用程序 REST 接口间接从 Amazon S3 下载文件 为此 我有一个 REST Controller 它向用户返回一个 InputStreamResource
  • VBA Excel如何在文本框中写入Excel公式

    如何将Excel公式放入文本框中 我尝试过这样的事情 Sub CivBox With ActiveSheet Shapes Civils 3 Copy C26 Activate Paste Shapes Shapes Count Name
  • VBA在下一个空白行正确输入用户表单数据

    创建了一个用户表单 添加了一个文本框和一个组合框 添加了提交按钮 单击 提交 后 会将数据添加到电子表格中 据我所知和我所读到的 这是错误的 ActiveCell Value TextBox3 Text ActiveCell Offset
  • Excel:COUNTIF 函数将“小于”字符视为运算符

    预读说明 我使用的是 LibreOffice 而不是 Excel 但大多数功能应该适用于两者 我正在制作一个电子表格 其中有大量数据 对于每个属性 例如员工数量或姓名 我需要一个函数来计算包含每个不同值的行数 我已经提取了不同的值 现在我使
  • 在 BIRT 中导出的 Excel 中表格单元格的文本换行

    我在 eclipse 中使用 BIRT 4 4 1 来生成报告 我想包装表头的文本 它在网络查看器中工作正常 但是当我导出到 Excel 时 表单元格文本在一行中 并且文本也溢出 我不想使单元格宽度等于内容 我想根据其容器宽度来换行文本 我
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐