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

相关推荐
菜鸟求带飞_3 分钟前
算法打卡:第十一章 图论part01
java·数据结构·算法
骆晨学长19 分钟前
基于springboot的智慧社区微信小程序
java·数据库·spring boot·后端·微信小程序·小程序
AskHarries24 分钟前
利用反射实现动态代理
java·后端·reflect
@月落25 分钟前
alibaba获得店铺的所有商品 API接口
java·大数据·数据库·人工智能·学习
世俗ˊ30 分钟前
CSS入门笔记
前端·css·笔记
liuyang-neu31 分钟前
力扣 42.接雨水
java·算法·leetcode
z千鑫34 分钟前
【人工智能】如何利用AI轻松将java,c++等代码转换为Python语言?程序员必读
java·c++·人工智能·gpt·agent·ai编程·ai工具
万河归海42838 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio
Flying_Fish_roe1 小时前
Spring Boot-Session管理问题
java·spring boot·后端
赚钱给孩子买茅台喝1 小时前
智能BI项目第四期
java·spring boot·spring cloud·aigc