easyexcel poi根据模板导出Excel

1.导入依赖

xml 复制代码
<!--    poi依赖-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.0.1</version>
</dependency>
<!--    poi对于excel 2007的支持依赖-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.0.1</version>
</dependency>
<!--    poi对于excel 2007的支持依赖-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.0.1</version>
</dependency>

2.代码实现

java 复制代码
package com.example.exceldemo;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ClassPathResource;

import java.io.*;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class EasyExcelTest {

    public static void main(String[] args) throws Exception {
        InputStream fis = null;
        OutputStream outputStream= null;
        Workbook wb = null;
        try {
            String fileName = "测试单位"+ UUID.randomUUID() + ".xlsx";
            String filePath = "D:\\report\\"+fileName;
            //1.获取数据
            List<ExcelVo> list = new ArrayList<>();
            list.add(new ExcelVo(1,"1221","黄山"));
            list.add(new ExcelVo(2,"3333","河水"));
            list.add(new ExcelVo(3,"6666","青石"));

            //2.获取模板
            fis = new ClassPathResource("templates/report_template.xlsx").getInputStream();
            File file=new File(filePath);
            if (!file.exists()) {
                file.createNewFile();
            }
            outputStream = new FileOutputStream(file);

            //3.根据模板创建工作簿
            wb = new XSSFWorkbook(fis);

            //4.读取工作表
            Sheet sheet = wb.getSheetAt(0);
            CellStyle styles[] = new CellStyle[row.getLastCellNum()];

            //5.抽取第2行的公共样式 , 因为第一行 为标题 第2行是数据 下标为1
            Row row = sheet.getRow(1);
            CellStyle styles[] = new CellStyle[row.getLastCellNum()];
            Cell cell = null;
            for (int i = 0; i < row.getLastCellNum(); i++) {
                cell = row.getCell(i);
                styles[i] = cell.getCellStyle();
            }

            //5.构造单元格
            int rowIndex=1;
            //方式一 手动
            for (ExcelVo vo2:list) {
                //创建每一行,同excel的第二行开始
                row= sheet.createRow(rowIndex++);
                //第一列
                int i=0;
                cell = row.createCell(i++);
                cell.setCellStyle(styles[0]);
                cell.setCellValue(vo2.getId());//写入数据 序号

                //第二列
                cell = row.createCell(i++);
                cell.setCellStyle(styles[0]);
                cell.setCellValue(vo2.getCode());

                //第三列(注:最后一列不用i++,前面的必须i++)
                cell = row.createCell(i);
                cell.setCellStyle(styles[0]);
                cell.setCellValue(vo2.getName());
            }

            //方式二 动态
            for (ExcelVo t:list) {
                //创建每一行,同excel的第二行开始
                row = sheet.createRow(rowIndex++);

                Field[] fields=t.getClass().getDeclaredFields();//获取filed
                for (int i = 0; i < fields.length; i++) {
                    Field field=fields[i];
                    field.setAccessible(true);//设置私有属性可以访问
                    Object val = field.get(t);//获取值
                    if (val==null)val="";
                    cell = row.createCell(i);
                    cell.setCellStyle(styles[0]);//设置单元格样式
                    cell.setCellValue(val.toString());//写入数据
                }
            }

            wb.write(outputStream);//写入数据
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            fis.close();
            wb.close();
            outputStream.close();
        }
    }
}

3.模板

参考:https://blog.csdn.net/weixin_45742032/article/details/119593288?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119593288-blog-86538258.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119593288-blog-86538258.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=2

相关推荐
TeDi TIVE15 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
二哈赛车手15 小时前
新人笔记---ES和kibana启动问题以及一些常用的linux的错误排查方法,以及ES,数据库泄密解决方案[超详细]
java·linux·数据库·spring boot·笔记·elasticsearch
嵌入式×边缘AI:打怪升级日志16 小时前
嵌入式Linux开发核心自测题(全系列精华浓缩)
java·linux·运维
FQNmxDG4S16 小时前
JVM内存模型详解:堆、栈、方法区与垃圾回收
java·jvm·算法
幸福巡礼16 小时前
【LangChain 1.2 实战(一)】 概述
笔记·学习·langchain
观无16 小时前
MAUI笔记
笔记
Hello_Embed16 小时前
Windows 安装 Claude Code 并接入 模型
windows·笔记·ai编程
jason.zeng@150220716 小时前
Androidr入门环境搭建
java·kotlin
摇滚侠17 小时前
整洁的桌面和任务栏 Java 开发工程师提效方法
java·开发语言
大Mod_abfun17 小时前
数字媒体艺术概论(课堂作业/笔记)
笔记·媒体