首页 > 编程语言 >java笔记_15_动态生成Excel文件

java笔记_15_动态生成Excel文件

时间:2023-11-03 10:34:11浏览次数:56  
标签:15 java List ArrayList excel Excel add import new

// 创建表头数据
// 内层List按纵向创建,外层List按横向添加,横向重复的名称会自动合并表格。

List<List<String>> list = new ArrayList<>();

List<String> childList1 = new ArrayList<>();
childList1.add("aaa");
childList1.add("bbb");
childList1.add("ccc");
List<String> childList2 = new ArrayList<>();
childList2.add("aaa");
childList2.add("bbb");
childList2.add("ddd");
List<String> childList3 = new ArrayList<>();
childList3.add("aaa");
childList3.add("eee");
childList3.add("fff");

list.add(childList1);
list.add(childList2);
list.add(childList3);

依赖

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;

实现代码

            // 表头数据
            String titleJsonStr = "{\"name\":\"名称\",\"age\":\"年龄\"}";
            JSONObject titleJson = JSONObject.parseObject(req.getTitleJson(), Feature.OrderedField);
            //单行数据
            List<String> dataJsonList = new ArrayList<>();
            dataJsonList.add("{\"name\":\"testname1\",\"age\":\"1\"}");
            dataJsonList.add("{\"name\":\"testname2\",\"age\":\"2\"}");

            // 1.获取字段列表
            List<List<String>> headList = new ArrayList<>();

            List<String> colCodeList = new ArrayList<>();
            Map<String, Object> map = titleJson.getInnerMap();
            Iterator<String> keyList = map.keySet().iterator();
            while (keyList.hasNext()) {
                String key = keyList.next();
                // 添加字段
                colCodeList.add(key);
                // 按列添加标题
                List<String> headTitleName = new ArrayList<>();
                headTitleName.add(map.get(key).toString());
                headList.add(headTitleName);
            }

            // 2.生成Excel文件
            // 2.1.创建文件
            File file = new File(filePath);
            // 2.2.写入表头
            ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(file);
            excelWriterBuilder = excelWriterBuilder.head(headList).excelType(ExcelTypeEnum.XLSX);
            ExcelWriter excelBuild = excelWriterBuilder.build();
            WriteSheet writeSheet = EasyExcel.writerSheet("sheet").build();
            // 2.3.遍历对象写入表格
            for (int i = 0; i < dataJsonList.size(); i++) {
                // 获取单行数据
                List<List<String>> cellList = new ArrayList<>();
                // 获取单表格数据
                List<String> cell = new ArrayList<>();
                JSONObject dataJson = JSONObject.parseObject(dataJsonList.get(i));
                for (int j = 0; j < colCodeList.size(); j++) {
                    cell.add(dataJson.getString(colCodeList.get(j)));
                }
                cellList.add(cell);
                excelBuild.write(cellList, writeSheet);
            }
            excelBuild.finish();
            // 2.4.文件生成
            file.createNewFile();

 

Java ExcelWriter自定义表格构建:https://blog.csdn.net/Dvvvvvvvvvvvv/article/details/129255189

 

标签:15,java,List,ArrayList,excel,Excel,add,import,new
From: https://www.cnblogs.com/luyuting/p/17807051.html

相关文章

  • JavaScript for循环语句的特殊案例,用代码解决数学中的问题
    案例一:一百个和尚分一百个馒头,大和尚一人分三个,小和尚三人分一个,正好分完。问大、小和尚各几人?varnum=100;varpeople=100;varbig,small;for(big=0;big<=33;big++){small=people-big;if(big*3+small/3==num){d......
  • JAVA基础
    打开CMD的方式1.开始+系统+命令指示符2.win+r(输入cmd)打开控制台3.在任意的文件夹下面按住(shift)+鼠标右键点击,在此处打开命令窗口4.资源管理器的地址栏前面加上cmd路径5.管理员方式运行(开始-windows系统-命令提示符-鼠标右键更多-管理员方式运行常用dos命令1.盘符切换:英......
  • JavaScript String对象及方法总结
    String对象创建方法: newString()vartxt1=newString("string");vartxt2="string";String对象属性1、constructor:返回对String对象属性创建的函数  返回值:函数的引用,不是函数名:    字符串constructor属性返回 functionString(){[nativecode]}2、......
  • Java 注解
    从JDK5开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解),注解可以理解为代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理注解能被用来为程序元素(类、方法、成员变量)设置元数据。如果希望注解在运行时起到一定的作用,只有通过某种配套的工......
  • Java八股面试整理(2)
    11.int和integer有什么区别,两者在做==运算时会得到什么结果?int是基本数据类型,Integer是int的包装类。二者在做==运算时,Integer会自动拆箱为int类型,然后再进行比较。如果两个int值相等则返回true,否则就返回false。12.说一说你对面向对象的理解面向对象是一种更优秀的程序设计方......
  • Java 基础篇day05
    面向对象编程世间万物皆对象,在Java的观念中,把一切都看作对象,但是你操纵的确是一个对象引用。在Java中一旦创建了一个引用,就希望它能与一个新的对象继续关联,通常使用new操作符来实现这一目的。new的意思是,给我一个新对象,如果你不想相亲,自己new一个对象就好了,祝你下辈子幸福对象本......
  • Java网络编程实现一(服务器)对多(客户端)
    使用多线程+网络编程实现一个服务器对多个客户端在该程序中用到的知识点java的BIOServerSocket和Socket网络编程多线程的知识(个人认为重要)实现的思路服务器端(使用多个线程)在客户端需要有一个集合来存储已经连接上的客户端,如果客户端断开连接则需要从集合中删除创建一......
  • java
    我们先剖析一个完整的Java程序,它的基本结构是什么:/***可以用来自动创建文档的注释*/publicclassHello{publicstaticvoidmain(String[]args){//向屏幕输出文本:System.out.println("Hello,world!");/*多行注释开始注释......
  • java 网络编程之传输文件
    需要建两个类,分别作为服务器(接收文件)和客户端(发送文件) 1.服务器类:1package菜鸟教程.网络编程.网络编程之传输文件;23importjava.io.*;4importjava.net.InetAddress;5importjava.net.ServerSocket;6importjava.net.Socket;78/**9*服......
  • java网络编程与多线程
      一、Java 网络编程网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。java.net包中提供了两种常见的网络......