首先创建一个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. CPNtools协议建模安全分析(一)

    本文根据最近整理的CPNtools论文和CPNtools官网上的说明,以及参照了乌克兰敖德萨 ---国家电信研究院运输和通信部关于   电信系统协议仿真关于CPNtools的学生讲义.基于此和和自己的 ...

  2. 芯片公司Dialog产品调研简报

    一 公司简介: Dialog半导体有限公司的总部位于伦敦,设有一个全球销售.研发和营销部.2013年,公司实现了9.10亿美元的营业收入,是欧洲增长速度最快的公共半导体公司之一.   二 芯片型号: ...

  3. 基于恒玄BES2600的轻量级鸿蒙操作系统AIOT开发平台解析之SDK下载和编译

    一 鸿蒙系统 华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人.设备.场景有机地联系在一起, 将消费者在全场景生活中接触的多种智能终端实现极速发现.极速连接.硬 ...

  4. html添加css样式的两种方法

      html添加css样式有三种方法,分别为行内式(使用style属性,在特定的HTML标签内使用).内嵌式(style标签把css代码放在特定页面的head部分中).外联式(使用link标签,将外部 ...

  5. labeImg 遇到闪退问题,TypeError: setValue(self, a0: int): argument 1 has unexpected type 'float'

    将python 环境安装为python3.9,然后重新安装labelImg

  6. Access注入-Cookie注入

    Access注入-Cookie注入 1.Cookie简单介绍 2.Cookie注入原理及方法 一.Cookie简单介绍 What is Cookie? 储存在用户本地终端上的数据 类型为"小 ...

  7. @Autowired和@Resource整理

    参考,欢迎点击原文:https://www.ixigua.com/6991282608663593508?id=6945836219422999079&logTag=944f6616c791c ...

  8. github 镜像地址

    亲测可用的 github 镜像地址: https://hub.nuaa.cf , https://hub.fgit.cf

  9. 记录--vue3中的ref,toRef,toRefs

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. ref的使用 ref 接受一个原始值,返回一个具有响应式的对象,对象有一个value属性,其值就是所传递的原始值. ref是做的一个 ...

  10. mybatis @Param参数 记录

    报错信息 org.apache.ibatis.binding.BindingException: Parameter 'XX' not found. Available parameters are ...