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();
        }
    }
}


目录
相关文章
|
24天前
|
缓存 easyexcel Java
Java EasyExcel 导出报内存溢出如何解决
大家好,我是V哥。使用EasyExcel进行大数据量导出时容易导致内存溢出,特别是在导出百万级别的数据时。以下是V哥整理的解决该问题的一些常见方法,包括分批写入、设置合适的JVM内存、减少数据对象的复杂性、关闭自动列宽设置、使用Stream导出以及选择合适的数据导出工具。此外,还介绍了使用Apache POI的SXSSFWorkbook实现百万级别数据量的导出案例,帮助大家更好地应对大数据导出的挑战。欢迎一起讨论!
138 1
|
13天前
|
Java API Apache
|
4月前
|
运维 监控 算法
java实现一个动态监控系统,监控接口请求超时的趋势
java实现一个动态监控系统,监控接口请求超时的趋势
246 2
|
16天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
24 4
|
6月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
6月前
|
Java
java导出复杂excel
java导出复杂excel
|
2月前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
44 2
|
2月前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
1286 0
|
4月前
|
Java 数据安全/隐私保护
Java无模版导出Excel 0基础教程
经常写数据导出到EXCEL,没有模板的情况下使用POI技术。以此作为记录,以后方便使用。 2 工具类 样式工具: 处理工具Java接口 水印工具 导出Excel工具类 3 测试代码 与实际复杂业务不同 在此我们只做模拟 Controller Service 4 导出测试 使用Postman进行接口测试,没接触过Postman的小伙伴可以看我这篇博客Postman导出excel文件保存为文件可以看到导出很成功,包括水印 sheet页名称自适应宽度。还有一些高亮……等功能可以直接搜索使用
Java无模版导出Excel 0基础教程
|
5月前
|
存储 Java Maven
如何在Java中导入和导出CSV文件
如何在Java中导入和导出CSV文件
287 2