java根据模板导出excel

前言:

       最近项目中需要根据excle模板生成想要的excle文件,网上查阅资料后通过Jxls 库提供的方法得到解决,这里记录一下方法。文章末尾会附源码地址。

      Jxls 文档地址

首先新建excle模板,如图

java根据模板导出excel_第1张图片

我们希望数据能动态加入,预期结果就像这样

java根据模板导出excel_第2张图片

接下来在我们的模板中加入jxls表达式,点击表格中我们用到范围中的第一个格子,鼠标右键---->插入批注,如图

  java根据模板导出excel_第3张图片

 

java根据模板导出excel_第4张图片

说明:我们通过插入批注的方式来定义我们表格中所用到的表达式,表格中带右上角有红色标志的地方为加入批注,这里标题也弄成动态赋值,方便大家学习。

        jx:area(lastCell="D3")   定义我们用到的表格的范围 lastCall="D3" 这里表示我们用到的范围为A1到D3。

问题:  为什么是A1开始?因为第一行我们由于标题需要,所以进行了合并  其实我们最开始的位置因该是A1 ,也就是说只要表达式写在那个格子里面,就默认从当前格子开始,合并的就从合并的第一个格子开始算,lastCell 值为多少就默认为到哪个格子结束。

           为什么D3就要定义为结束?因为我们的模板所用的范围只到了D3 。

       jx:each(items="list" var="item" lastCell="D3")      想到与for循环 items="集合名称" ,  var="对象" ,lastCell="D3" 循环结束的位置。

 

更多表达式参见Jxls 文档地址

 

接下来创建maven项目,pom.xml引入依赖


        
            org.projectlombok
            lombok
            1.16.18
        
        
        
            org.jxls
            jxls
            2.6.0
        
        
            org.jxls
            jxls-poi
            1.1.0
        

        
        
            org.slf4j
            slf4j-simple
            1.7.25
            compile
        

学生对象Student.java,这里使用了lombok表达式, 加入@Data注解后省去了get、set  以及构造方法的书写,不用的可以自行加入对应方法

@Data
public class Student {
    private String name;
    private int age;
    private String sex;
    private String className;

}

打印类print.java


import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;

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

public class Print {
    /**
     * 打印方法
     * @throws Exception
     */
    public static void print() throws Exception {
        //准备数据
        List list = new ArrayList();
        for (int i = 0; i < 20; i++) {
            Student stu = new Student();
            stu.setAge(i);
            stu.setClassName("一年级");
            stu.setName("张三" + i);
            stu.setSex("男");
            list.add(stu);
        }
        //获取模板文件,你自己当前模板的位置  我这里为当前项目下
        //如果为系统路径 为: InputStream is = new FileInputStream("F://student.xlsx");
        InputStream is = Print.class.getClassLoader().getResourceAsStream("student.xlsx");
        //根据模板生成的文件保存路径  我这里保存在本地D盘
        OutputStream os = new FileOutputStream("D://student.xlsx");
        //绑定数据
        Context context = new Context();
        context.putVar("title", "学上统计表");
        context.putVar("list", list);
        //生成
        JxlsHelper.getInstance().processTemplate(is, os, context);
    }
    
    public static void main(String[] args) throws Exception {
        print();
    }

}

特别注意的地方就是数据绑定那里,如果你是对象取值就为对象.属性。运行main方法,去保存的路径下查看生成的文件,效果如图

java根据模板导出excel_第5张图片

最后希望能帮助大家!源码中加入了 图片的插入,有兴趣的可以看一下。

源码地址:https://gitee.com/xu0123/java.git

你可能感兴趣的:(java,springboot)