jxls和easypoi实现 java 实现动态组装列头导出(动态head)

简介: jxls和easypoi实现 java 实现动态组装列头导出(动态head)

完整项目 : https://github.com/Dr-Water/springboot-jxls


一、 jxls 实现

jxls的maven依赖

 <!-- jxls依赖 -->
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>1.0.15</version>
        </dependency>


  1. java代码


import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
/**
 * 简单表格--动态列的数据以及列的字段类型
 */
public class T1 {
    public static void main(String[] args) throws Exception {
        //构造集合数据
        List<List<Object>> dataList = new ArrayList<List<Object>>();
        List<Object> data1 = new ArrayList<Object>();
        data1.add("chendd");data1.add("男");data1.add(25);
        dataList.add(data1);
        List<Object> data2 = new ArrayList<Object>();
        data2.add("jiangjj");data2.add("男");data2.add(26);
        dataList.add(data2);
        List<Object> data3 = new ArrayList<Object>();
        data3.add("zengxr");data3.add("男");data3.add(27);
        dataList.add(data3);
        //载入模板
        //InputStream is = T1.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleGrid.xls");
        FileInputStream is = new FileInputStream(new File("F:\\templates\\竖列模板.xlsx"));
        Context context = new Context();
        context.putVar("headers", Arrays.asList("姓名" , "性别" , "年龄"));
        context.putVar("dataList", dataList);
        OutputStream os = new FileOutputStream(new File("F:\\templates\\result3.xlsx"));
        //指定Sheet文件解析
        JxlsHelper.getInstance().processTemplate(is, os, context);
        os.flush();
        os.close();
        is.close();
    }
}


  1. excel模板(模板在 https://github.com/Dr-Water/springboot-jxls/blob/master/src/main/resources/templates/竖列模板.xlsx)




如果需要不需要展示第一列(隐藏标题 人员信息表),在模板中隐藏即可,目前还不能直接取消这个标题头,,否则jxls无法解析填充excel,具体怎么隐藏列,自行百度。(参考链接:jxls去掉行标题
)如果这种方式满足不了需求,可以参考方法二:使用easypoi进行动态组装列导出


二、easypoi实现

导入easypoi的maven坐标


 <!--阿里easypoi-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.7</version>
        </dependency>


import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.metadata.Table;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class SimpleWrite {
    public static void main(String[] args) {
        // 文件输出位置
        String outPath = "F:\\templates\\result4.xlsx";
        try {
            // 所有行的集合
            List<List<Object>> list = new ArrayList<List<Object>>();
            for (int i = 1; i <= 10; i++) {
                // 第 n 行的数据
                List<Object> row = new ArrayList<Object>();
                row.add("第" + i + "单元格");
                row.add("第" + i + "单元格");
                list.add(row);
            }
            ExcelWriter excelWriter = EasyExcelFactory.getWriter(new FileOutputStream(outPath));
            // 表单
            Sheet sheet = new Sheet(1, 0);
            sheet.setSheetName("第一个Sheet");
            // 创建一个表格
            Table table = new Table(1);
            // 动态添加 表头 headList --> 所有表头行集合
            List<List<String>> headList = new ArrayList<List<String>>();
            // 第 n 行 的表头
            List<String> headTitle0 = new ArrayList<String>();
            List<String> headTitle1 = new ArrayList<String>();
            List<String> headTitle2 = new ArrayList<String>();
            headTitle0.add("最顶部-1");
            headTitle0.add("标题1");
            headTitle1.add("最顶部-1");
            headTitle1.add("标题2");
            headTitle2.add("最顶部-1");
            headTitle2.add("标题3");
            headList.add(headTitle0);
            headList.add(headTitle1);
            headList.add(headTitle2);
            table.setHead(headList);
            excelWriter.write1(list, sheet, table);
            // 记得 释放资源
            excelWriter.finish();
            System.out.println("ok");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}


目录
相关文章
|
2月前
|
Java
java实现动态验证码源代码——绘制验证码的jsp
java实现动态验证码源代码——绘制验证码的jsp
13 0
|
2月前
|
前端开发 Java
java实现动态验证码源代码——jsp页面
java实现动态验证码源代码——jsp页面
13 0
|
2月前
|
Java
java程序导出堆文件
java程序导出堆文件
|
3月前
|
安全 Java API
JDK 11中的动态类文件常量:探索Java字节码的灵活性与动态性
在JDK 11中,Java语言引入了一个新的特性,允许在运行时动态地修改类文件常量。这一特性为Java开发者提供了更大的灵活性,使他们能够根据需要在运行时更改类文件中的常量值。本文将深入探讨动态类文件常量的工作原理、优点、限制以及在实际项目中的应用。
48 11
|
12天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
28 11
|
2月前
|
SQL Java easyexcel
【Java】百万数据excel导出功能如何实现
【Java】百万数据excel导出功能如何实现
152 0
|
2月前
|
Java API Maven
|
3月前
|
JSON 前端开发 Java
|
4月前
|
监控 安全 Java
Java反射:深入了解动态类操作
Java反射:深入了解动态类操作
71 0
|
5月前
|
监控 Java 流计算
Java Thread dump和Head dump 文件分析
Java Thread dump和Head dump 文件分析
47 0