jxls Excel表格导出( 模板导出多个sheet)

2023-11-19

使用模板来导出excel表格

1.使用jxls-core jar包来实现(jxls-core不支持POI4以上的版本

1.1 maven

<dependency>
    <groupId>net.sf.jxls</groupId>
    <artifactId>jxls-core</artifactId>
    <version>1.0.6</version>
</dependency>
//打包时对像xlsx文件过滤
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
            <nonFilteredFileExtension>xls</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

1.2Java代码

@Override
public void exportMaterialBomExcel(String bomId, HttpServletRequest request, HttpServletResponse response) throws IOException, InvalidFormatException {

    //获取模板文件位置
    URL url = this.getClass().getClassLoader().getResource("bom/bom.xlsx");
    InputStream is = new FileInputStream(url.getFile());
    //获取sheet页数据
    List<Object> objectList = new ArrayList<>();
    HashMap<String, Object> param = new HashMap<>();
    List<String> nameList = new ArrayList<>();

   
    List<BomManufactureTitle> titleList = bomManufactureTitleService.getBomManufactureTitleName(bomId);
    for (int i = 0; i < titleList.size(); i++) {
        nameList.add(titleList.get(i).getName());
      
        List<BomApproval> approvalList = bomApprovalService.listByWrapper(new EntityWrapper<BomApproval>().eq("BOM_ID", titleList.get(i).getId()));
    
        List<BomManufactureMaterial> materialList = bomManufactureMaterialService.listByWrapper(new EntityWrapper<BomManufactureMaterial>().
                eq("MBOM_CODE", titleList.get(i).getCode()).ge("MAX_VERSION", titleList.get(i).getVersion()).le("MIN_VERSION", titleList.get(i).getVersion()).orderBy("FEED_NO"));

        List<Map<String, Object>> returnMap = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("entity", titleList.get(i));
        map.put("approval", approvalList.size() == 0 ? null : approvalList.get(0));
        map.put("materialList", materialList);

        returnMap.add(map);
        objectList.add(returnMap);

        //不同的sheet页使用不同的数据
        if (i != 0) {
            param.put("returnMap" + i, returnMap);
        }
    }

    XLSTransformer transformer = new XLSTransformer();
    Workbook workbook = transformer.transformMultipleSheetsList(is, objectList, nameList, "returnMap", param, 0);
    this.setResponse(response);
    workbook.write(response.getOutputStream());

}

private void setResponse(HttpServletResponse response) {
    response.reset();
    response.setContentType("application/octet-stream; charset=utf-8");
    response.setHeader("Content-Disposition", "attachment; filename=" + "xlsxExport.xlsx");
}

1.3模板

2.jxls2.x 来实现(支持POI4以上的版本

maven依赖

<dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.8.1</version>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>2.8.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
@Override
public void exportMaterialBomExcel(final String bomId, final HttpServletResponse response) throws IOException, InvalidFormatException, Exception {
    //获取模板文件
    final InputStream is = this.getInputStream();

    final Map<String, Object> returnMap = new HashMap<>();
    final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    final List<String> nameList = new ArrayList<>();
    //工艺数据
    final List<BomManufactureTitle> titleList = bomManufactureTitleService.getBomManufactureTitleName(bomId);
    titleList.forEach(entity -> {
        nameList.add(entity.getName());
        //格式化时间
        entity.setCreateTime(format.format(entity.getCreateDate()));
        //审批数据
        final List<BomApproval> approvalList = bomApprovalService.listByWrapper(new EntityWrapper<BomApproval>().eq("BOM_ID", entity.getId()));
        entity.setApprovalList(approvalList.size() == 0 ? null : approvalList.get(0));
        //物料详情数据
        entity.setMaterialList(bomManufactureMaterialService.listByWrapper(new EntityWrapper<BomManufactureMaterial>().
                eq("MBOM_CODE", entity.getCode()).ge("MAX_VERSION", entity.getVersion()).le("MIN_VERSION", entity.getVersion()).orderBy("FEED_NO")));
    });

    returnMap.put("titleList", titleList);
    //将文件放置到客户端下载
    this.setResponse(response);
    //excel表格导出
    this.exportExcel(is, response.getOutputStream(), returnMap);

}


private InputStream getInputStream() throws FileNotFoundException {
    final URL url = this.getClass().getClassLoader().getResource("bom/bom.xls");
    return new FileInputStream(url.getFile());
}

private void setResponse(final HttpServletResponse response) {
    response.reset();
    response.setContentType("application/octet-stream; charset=utf-8");
    response.setHeader("Content-Disposition", "attachment; filename=" + "xlsxExport.xls");
}

public static void exportExcel(final InputStream is, final OutputStream os, final Map<String, Object> model) throws IOException {
    final Context context = PoiTransformer.createInitialContext();
    if (model != null) {
        for (final String key : model.keySet()) {
            context.putVar(key, model.get(key));
        }
    }
    final JxlsHelper jxlsHelper = JxlsHelper.getInstance();
    final Transformer transformer = jxlsHelper.createTransformer(is, os);
    //必须要这个,否者表格函数统计会错乱
    jxlsHelper.setUseFastFormulaProcessor(false).processTemplate(context, transformer);

}

2.1模板

jxls2.x版本中的模板是通过使用注解的方法来实现循环和分多个sheet页的

 

 

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

jxls Excel表格导出( 模板导出多个sheet) 的相关文章

随机推荐

  • angular:ng build默认文件带hash值,可以防止cdn缓存导致用户文件不能刷新

    问题 如题 说明 cdn缓存了文件 如果是同一个名称文件 如果不手动清除cdn缓存 则用户获取的是旧的 而不是新的 因此如果前端打包在文件加上hash 这样文件有变动 用户会获取新文件
  • 自动驾驶数据闭环,要么被高估了,要么被低估了?

    在和身边的人沟通自动驾驶的数据闭环时 会碰到两类典型的人 第一类 当你给他讲数据闭环的时候 他的眼神是迷茫的 好像没有引起太多的重视和共鸣 甚至有人会反馈 嗯 这个没什么 我们以前干的差不多 第二类 他会觉得数据闭环 能解决一切问题 而且
  • mysql 新版本出现group by 语句不兼容问题

    原文地址 http www cnblogs com anstoner p 6414440 html 注 文中的方式 我只是用了修改sql mode 的方法 其它的未尝试 全文如下 目录 1 具体出错提示 1 1 1 查看sql mode 1
  • Java Web快速开发(1)Java 项目构建

    文章目录 Java 项目构建 1 Java 版本发展 2 集成开发环境 3 Java发布形式 1 扩展参数说明 2 JVM 内存回收机制 3 Java 程序分析调测工具 4 Maven Java 项目构建 1 Java 版本发展 EJB E
  • 流媒体之推流和拉流

    推流 将直播内容推送至服务器的过程 拉流 为服务器已有直播内容 用指定地址进行拉取的过程 什么是推流 推流 指的是把采集阶段封包好的内容传输到服务器的过程 其实就是将现场的视频信号传到网络的过程 推流 对网络要求比较高 如果网络不稳定 直播
  • QPixmap的深拷贝和浅拷贝

    在最近的项目中用到了QPixmap 涉及多线程操作QPixmap对象 为了简单 比如在线程1中构造了一个QPixmap对象 传入线程2 这时调用的函数为operator const QPixmap pixmap 对于不了解QPixmap类的
  • 静态分析基础技术

    静态分析基础技术 原文链接 https hvnt3r top 2019 01 静态分析基础技术 知识点 我觉得安全圈的思路都是差不多的 跟渗透测试一样 对一个恶意软件的分析也需要前期的信息收集阶段来帮助我们对目标有一个大致的了解和认识 方便
  • 使用mui button提交ajax请求后台失败的原因

    在input内输入单号 人工点击按钮触发事件ajax请求后台 一切正常 但是 如果在input内输入完单号 用安卓或苹果手机的软键盘回车键事件调用ajax请求后台 就会有问题 原因如下 mui提供的按钮默认是放在
  • 华为机试题97-记负均正

    描述 首先输入要输入的整数个数n 然后输入n个整数 输出为n个整数中负数的个数 和所有正整数的平均值 结果保留一位小数 0即不是正整数 也不是负数 不计入计算 如果没有正数 则平均值为0 数据范围 1 n 2000 输入的整数都满足 val
  • 配置本地docker与镜像并上传到服务器使用

    1 在本地创建基础容器 官网 1 卸载旧版本 如果有 sudo apt get remove docker docker engine docker io containerd runc 2 设置Docker的存储库并从中安装 更新包索引并
  • SQL优化技巧

    本文以Mysql数据库为例 总结数据库优化方法 一 数据库优化四个层面 Mysql数据库优化 可以从以下四个层面优化 硬件 系统配置 数据库表结构 sql语句及索引 优化效果 SQL语句及索引 gt 数据库表结构 gt 系统配置 gt 硬件
  • CentOS8 同步时间chrony ntpdate已无法使用

    CentOS8 同步时间chrony ntpdate已无法使用 在CentOS8中 已使用chrony替代ntp 首先安装chrony 使用dnf安装 dnf install y chrony 也可以用yum安装 yum install y
  • Linux权限、用户组、用户

    前提 这里以Centos7为例 首先进入 目录 并输入 ls l cd ls l 分析 根据上图我们拿其中一条来说 drwxr xr x 14 root root 3440 Aug 14 07 31 dev 第一个字母 d 代表这个文件的含
  • 俄罗斯担忧开发者无法访问开源代码,为什么开源如此重要?

    俄乌冲突背景下 俄国媒体发文称 世界第一开源软件平台GitHub正在考虑限制俄罗斯软件开发者访问开源软件源代码储存库 此外 数据库巨头 Oracle 也宣布已经暂停了在俄罗斯的所有业务 这些消息迅速刷屏 原因之一便是现在的 IT 世界已离不
  • Win10环境下配置VScode远程开发ssh-remote(免密登录)

    问题背景 在开发或者做实验的过程中 我们经常会用到远程服务器或者Github的项目 而我服务器上的项目只能在Jupyter Notebook上编写 或许可以在其他IDE上写 但我不知道 而我们喜欢用的IDE比如Pycharm 轻量级的VSc
  • C语言之指针知识大总结

    文章目录 一 地址 二 指针与指针变量 三 指针的作用 四 初学指针时常见的错误 五 通过调用函数修改主调函数中的值 六 指针与一维数组 七 使用函数操作一维数组 八 指针变量所占字节数 九 静态数组的缺陷 十 malloc函数 十一 动态
  • ElasticSearch 6.3版本(ES)查询人名关键字不拆词查询

    ElasticSearch 6 3版本 ES 查询关键字不拆词查询 类似mysql 的 like 语句 mysql的sql语法类似如下 采用大量like和locate语法 进行模糊查询 导致查询一个需要8秒多 通过ES优化后 总的查询在1秒
  • postman中进行SHA1或MD5签名

    大部分接口为了防御重放攻击 往往使用SHA1或者MD5对请求进行签名 例如 我们有如下请求 Request URL http xx xx xx xx nonce 123 timestamp 123 Body xxx xxx signatur
  • ESP8266(果云科技的开发板源码)

    ESP8266 果云科技的开发板源码 TOC 最近调试果云科技的老板子ESP8266开发板 比较老了 调试串口输入很麻烦 因为API函数很麻烦 源码已上传 请下载 下面是代码 File uart c Copyright 2013 2016
  • jxls Excel表格导出( 模板导出多个sheet)

    使用模板来导出excel表格 1 使用jxls core jar包来实现 jxls core不支持POI4以上的版本 1 1 maven