java项目中使用 jxls 插件 导出excel报表

硅谷探秘者 算法基础 2273 0 0

什么是jxls

jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来定义输出格式和布局。

其实java中成熟的excel导出工具有pol、jxl,但他们都是使用java代码的方式来导出excel,编码效率很低且不方便维护。

jxls是通过预制excel模板,然后通过jxls相应API将我们应用程序的数据结合模板格式输出到相应的excel文件中,从而形成报表。

下面就以导出一个简单的员工表信息为例说明,并贴出java的实现代码。

pom依赖

项目pom文件中添加如下依赖

<dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.9.0</version>
        </dependency>

制作excel模板

excel模板如下:

员工表

 编号 姓名简介
${v.id} ${v.name}${v.text}

当然没有那么简单,有两个地方还要添加批注。

第一个是必须添加的批注,就是在第一行第一列的单元格上添加,说明生成单元格作用的范围。例如:

jx:area(lastCell="C3") 

第二个就是需要循环遍历数据集合的批注,具体如下:

jx:each(items="data" var="v" lastCell="C3")

解释一下,each一看就是到干啥的不多解释,items是指定需要遍历的数据集合,var是指定一个别名,在单元格中做标记,方式如${v.id}。lastCell是指定循环作用的单元格范围例如C3就是第C列,第3行。

java代码实现

实体类

import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Entity {
    private Integer id;
    private String name;
    private String text;
}

主要实现


import club.jiajiajia.jxls.config.AutoRowHeightCommand;
import club.jiajiajia.jxls.entity.Entity;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.core.io.ClassPathResource;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 一般导出(导出一个列表数据)
 */
public class Test2 {
    public static void main(String[] args) throws Exception{
        InputStream templateIn= new ClassPathResource("template/template2.xlsx").getInputStream();

        OutputStream os =new FileOutputStream("D:\\data\\temp2.xlsx");

        Context context = new Context();

        List<Entity> data = new ArrayList<>();
        data.add(new Entity(1,"张三","张三的简介"));
        data.add(new Entity(2,"李四","里斯的简介"));
        data.add(new Entity(3,"王五","王五的简介"));
        data.add(new Entity(4,"赵六","赵六的简介"));

        context.putVar("data", data);

        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
        jxlsHelper.getAreaBuilder().getTransformer();

        jxlsHelper.processTemplate(templateIn, os, context);

    }
}

这只是一个简单的导出示例,其实还有很多需要注意的点没有说到。如果需要自定义一些标注,以及怎样使用公式等,请参照我写的一个demo。github地址如下:https://github.com/18438301593/jxls2.git

还有一个是另一个版本的:https://github.com/18438301593/jxls.git

模板和代码github里面都有。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
算法基础 3081 如何使jslx请参考之前写的文章:http://www.jiajiajia.club/blog/artical/76vv9kuy36j4/454添加配置
weblog 2765 java使easypoi并下载excel简单测试如图:一、pom文dependencygroupIdcn.afterturn/groupIdartifactIdeasypoi
框架 1836 maven使tomcat71.pom文build finalNamedz/finalName plugins plugin
weblog 6102 java使easypoiexcel时进行值替换如性别:数据库储存的是数字,1代男,2代女。的时候需要是汉字。在实体类使@Excel注解。 @Excel(name="性别
算法基础 2777 创建一个文夹,存放第三方依赖的jar包,将需要引的jar包拷贝到此录右键选择AddasLibrary选添加到构建环境,此时就可以jar包的类了。注意:如果你入了第三方
框架 1632 最近在遇到了一个批量excel的功能,excel到的是esaypoi,可以轻松将excel的数据封装成对象,但是不知为何,突然转换对象的过程变得很慢,一万条数据得转换一分钟。无奈只
rabbitmq 1511 rabbitmq_auth_backend_http一、rabbitmqrabbitmq_auth_backend_http二、修改配置文三、开启验证缓存功能一、rabbitmq
工具 1636 eclipse内置了git,不在需要安装eclipse把工程初始化本地库右击-team-ShareProject-Git-next-选
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。