【Java】Jxls--轻松生成 Excel

1、介绍

Jxls 是一个小型 Java 库,可以轻松生成 Excel 报告。Jxls 在 Excel 模板中使用特殊标记来定义输出格式和数据布局。

Java 有一些用于创建 Excel 文件的库,例如Apache POI。这些库都很好,但都是一些较底层的库,因为它们要求开发人员编写大量 Java 代码,甚至创建一个简单的 Excel 文件。

通常,人们必须手动设置电子表格的每个单元格格式和数据。根据报表布局和数据格式的复杂性,Java 代码可能变得相当复杂并且难以调试和维护。此外,并非所有 Excel 功能都受支持并且可以使用库 API 进行操作(例如,对宏、图表等的支持有限)。

对于不支持的功能,建议的解决方法是在 Excel 模板中手动创建对象,然后使用数据填充模板。Jxls提供了这种功能。使用 Jxls 时,只需在 Excel 模板文件中定义所需的报告格式和数据布局,然后运行 ​​Jxls 引擎以使用数据填充模板。开发人员只需编写一点Java代码即可触发Jxls引擎对模板的处理。

2、入门示例

jxls底层是依赖poi。

引入对应的库:

xml 复制代码
	<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls</artifactId>
			<version>2.10.0</version>
		</dependency>

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

创建DTO:

Employee.java

java 复制代码
package com.example.demo;

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

@Data
public class Employee {
    private String name;

    private Date birthDate;

    private BigDecimal payment;

    private BigDecimal bonus;
}

制作模板:

注意:
jx:area(lastCell="D5"):要模板的设置区域
jx:each(items="employees" var="employee" lastCell="D5"):设置填充数据时的表达式命令

测试代码:

java 复制代码
package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

@Slf4j
public class JxlsDemoMain {
    public static void main(String[] args) {
        log.info("start...");
        List<Employee> employeeList = generateEmployeeData();
        try(InputStream is =JxlsDemoMain.class.getResourceAsStream("/templates/demo.xls");
       OutputStream os = new FileOutputStream("demo-001.xls")){
            Context context = new Context();
            context.putVar("employees",employeeList);
            JxlsHelper.getInstance().processTemplateAtCell(is,os,context,"Result!A1");

        }catch (Exception e){
            e.printStackTrace();
            log.error(e.getMessage());
        }

    }

    private static List<Employee> generateEmployeeData(){
        List<Employee> employees = new LinkedList<>();

        int num = 100;
        while (num>0){
            Employee employee = new Employee();
            employee.setName("kexuexiong"+num);
            employee.setBonus(BigDecimal.valueOf(1000));
            employee.setPayment(BigDecimal.valueOf(1000));
            employee.setBirthDate(new Date());
            employees.add(employee);
            num--;
        }

        return employees;
    }

}

输出结果:

相关推荐
周末也要写八哥19 小时前
C++实际开发之泛型编程(模版编程)
java·开发语言·c++
好家伙VCC19 小时前
**发散创新:用 Rust实现游戏日引擎核心模块——从事件驱动到多线程调度的实战
java·开发语言·python·游戏·rust
m0_7164300720 小时前
JavaScript中类属性与原型属性的覆盖规则详解
jvm·数据库·python
014-code20 小时前
Chronicle Queue:把 Disruptor 的数据落盘
java·服务器
m0_7349497920 小时前
Redis如何降低快照对CPU的影响_合理分配RDB执行时机避开业务高峰期
jvm·数据库·python
Dxy123931021620 小时前
Python在图片上画圆形:从入门到实战
开发语言·python
小江的记录本20 小时前
【系统设计】《2026高频经典系统设计题》(秒杀系统、短链接系统、订单系统、支付系统、IM系统、RAG系统设计)(完整版)
java·后端·python·安全·设计模式·架构·系统架构
希望永不加班20 小时前
SpringBoot 中 AOP 实现权限校验(角色/权限)
java·spring boot·后端·spring
m0_3776182320 小时前
HTML怎么显示速率限制重置时间_HTML X-RateLimit-Reset解析【说明】
jvm·数据库·python
u01091476020 小时前
C#怎么实现OAuth2.0授权_C#如何对接第三方快捷登录【核心】
jvm·数据库·python