• 【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

    引入对应的库:

    	<dependency>
    			<groupId>org.jxlsgroupId>
    			<artifactId>jxlsartifactId>
    			<version>2.10.0version>
    		dependency>
    
    		<dependency>
    			<groupId>org.jxlsgroupId>
    			<artifactId>jxls-poiartifactId>
    			<version>2.10.0version>
    		dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    创建DTO:
    Employee.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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    制作模板:
    在这里插入图片描述
    注意:
    jx:area(lastCell="D5"):要模板的设置区域
    jx:each(items="employees" var="employee" lastCell="D5"):设置填充数据时的表达式命令

    测试代码:

    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;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    输出结果:
    在这里插入图片描述

  • 相关阅读:
    基于JavaSwing开发学生管理系统(登录增删改查)+论文报告 课程设计 大作业
    Python装饰器(包装函数、拦截函数)
    【IPC 通信】信号处理接口 Signal API(3)
    Node.js 入门教程 13 在 Node.js 中从命令行接收输入
    Anacode+YOLO识别图片
    实践小记——C#格式化小数输出
    智领云CEO彭锋:DataOps,大数据的新战线
    DAPS~5G NR双激活协议栈
    Node.js精进(2)——异步编程
    Spark简介及linux环境搭建(local本地模式)
  • 原文地址:https://blog.csdn.net/qq_22744093/article/details/132687360