首先创建一个maven项目,导入POI依赖包

 <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>

泛型的使用是为了让生成excel表格的方法具有通用性

代码里边需要有一个跟excel表格行数相对应的实体类,需求是将实体类集合存入表格中

public class UserEntity {

    private Long id;
private String username;
private String type;
private String name;
private String password;
}

这里通过传入参数:文件路径、文件要存储的集合数据、excel的sheet名称、表格第一行的数据(各个列的名称)

创建excel文件使用的都是POI的接口,创建excel,创建一个sheet,存入数据

public static<E> String exportExcel(List<E> entities, String sheetName, String[] rowHeads, String filePath) throws IllegalAccessException, IOException {
//创建一个excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
//创建excel的一个sheet
HSSFSheet sheet = workbook.createSheet(sheetName); // 创建第一行
HSSFRow row = sheet.createRow(0);
// 创建表格样式
HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); // 将列名放入
for (int i = 0; i < rowHeads.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(rowHeads[i]);
cell.setCellStyle(style);
} for (int i = 0; i < entities.size(); i++) {
row = sheet.createRow(i+1);
// 使用反射获取对象
E entity = entities.get(i);
Class clazz = entity.getClass();
// 获取对象的属性集合
Field[] fields = clazz.getDeclaredFields(); for (int j = 0; j < fields.length; j++) { Field field = fields[j];
field.setAccessible(true); Object object = field.get(entity);
row.createCell(j).setCellValue(String.valueOf(object));
}
}
workbook.write(new FileOutputStream(filePath));
return filePath;
}

这里传入的是一个泛型的集合,所以并不知道这个集合是哪种类型,只能通过反射获取对象的属性

首先获取对象的类定义,然后获取属性集合

  • 因为类在定义时属性都使用了private修饰,所以要设置属性为可访问的
  • 如果当前类有父类的话,这种方式不能获取父类属性,要通过父类获取

得到数据后便将excel表格数据存储到文件中

测试代码

public static void main(String[] args) throws IOException, IllegalAccessException {

        List<UserEntity> userEntities = new ArrayList<>();

        // 初始化数据
for (int i = 0; i < 10; i++) {
UserEntity entity = new UserEntity();
entity.setId((long) (i+1));
entity.setName("小明" + i);
entity.setUsername("username" + i);
entity.setPassword("password" + i);
entity.setType("教师");
userEntities.add(entity);
} // 表格第一行存储列的名称
String[] headName = new String[]{"用户id","姓名","账号","密码","类型"}; // sheet的名称
String sheetName = "用户统计表"; String fileName = UUID.randomUUID() + ".xls"; exportExcel(userEntities,sheetName,headName,fileName);
}

使用了UUID作为文件名,防止文件被重复,需要指定文件类型为xls

文件被创建了,如果没有指定路径,默认是和src文件夹在同一个目录下

Java:使用POI和泛型生成excel表格的更多相关文章

  1. Java利用POI实现导入导出Excel表格示例代码

    转自:https://www.jb51.net/article/95526.htm 介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其 ...

  2. POI tools 参数化生成excel表格

    package com.eccom.neteagle.server.confsave.service.impl; import java.io.File; import java.io.FileNot ...

  3. Java导出数据行写入到Excel表格:基于Apache POI

    Java导出数据行写入到Excel表格:基于Apache POI import java.io.File; import java.io.FileOutputStream; import org.ap ...

  4. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  5. Java使用POI读取和写入Excel指南

    Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...

  6. Java使用POI实现数据导出excel报表

    Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...

  7. H5纯前端生成Excel表格

    H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...

  8. 详解python操作生成excel表格,并且填充数据

    最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...

  9. Java 利用poi生成excel表格

    所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...

  10. Java 使用Apache POI读取和写入Excel表格

    1,引入所用的包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxm ...

随机推荐

  1. 从零开始写 Docker(五)---基于 overlayfs 实现写操作隔离

    本文为从零开始写 Docker 系列第五篇,在 pivotRoot 基础上通过 overlayfs 实现写操作隔离,达到容器中写操作和宿主机互不影响. 完整代码见:https://github.com ...

  2. FreeRTOS教程4 消息队列

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  3. Navicat 15 最新破解版下载_永久激活注册码(附图文安装教程)

    Navicat 15 最新破解版下载_永久激活注册码(附图文安装教程) 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习 ...

  4. 【stars-one】B站视频下载通

    一键下载B站的普通视频.番剧.电影的小工具 获取软件 由于软件还未完善,目前打赏价定位5.88元,后面软件完善价格会提高 >>>点击跳转打赏页面 目前Android版还在开发中 电脑 ...

  5. DL基础补全计划(四)---对抗过拟合:权重衰减、Dropout

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. 记录--使用Lunchbox 在 vue3 中创建一个 3D 地球

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 什么是 Lunchbox.js Lunchbox.js 是 Three.js 的 Vue 3 自定义渲染器. 你可以把它想象成 Vue 的 ...

  7. 散列表的数据结构以及对象在JVM堆中的存储过程

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/129916399 出自[进步* ...

  8. linux系统centos7.9如何安装nginx

    1.官网下载nginx nginx官网:https://nginx.org/ 选择稳定版进行下载,也可以下载老版本,下载成功后上传到服务器. 2.使用wget下载 访问nginx官网,在下载页面鼠标右 ...

  9. KingbaseES 名词解释之timeline

    timeline定义 每当归档文件恢复完成后,创建一个新的时间线用来区别新生成的WAL记录.WAL文件名由时间线和日志序号组成 引入timeline的意义 为了理解引入时间线的背景,我们来分析一下,如 ...

  10. KingbaseES V8R6 集群中复制槽非活跃状态的可能原因

    背景 此问题环境是一主五备物理集群,其中node1是主节点,node2,3是集群同步节点,node4,5是集群异地异步节点,由于异地和主节点不同网段,网速非常慢. kdts-plus工具纯迁数据,每分 ...