Java:使用POI和泛型生成excel表格
首先创建一个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表格的更多相关文章
- Java利用POI实现导入导出Excel表格示例代码
转自:https://www.jb51.net/article/95526.htm 介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其 ...
- POI tools 参数化生成excel表格
package com.eccom.neteagle.server.confsave.service.impl; import java.io.File; import java.io.FileNot ...
- Java导出数据行写入到Excel表格:基于Apache POI
Java导出数据行写入到Excel表格:基于Apache POI import java.io.File; import java.io.FileOutputStream; import org.ap ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- Java使用POI读取和写入Excel指南
Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- H5纯前端生成Excel表格
H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...
- 详解python操作生成excel表格,并且填充数据
最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...
- Java 利用poi生成excel表格
所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...
- Java 使用Apache POI读取和写入Excel表格
1,引入所用的包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxm ...
随机推荐
- CPNtools协议建模安全分析(一)
本文根据最近整理的CPNtools论文和CPNtools官网上的说明,以及参照了乌克兰敖德萨 ---国家电信研究院运输和通信部关于 电信系统协议仿真关于CPNtools的学生讲义.基于此和和自己的 ...
- 芯片公司Dialog产品调研简报
一 公司简介: Dialog半导体有限公司的总部位于伦敦,设有一个全球销售.研发和营销部.2013年,公司实现了9.10亿美元的营业收入,是欧洲增长速度最快的公共半导体公司之一. 二 芯片型号: ...
- 基于恒玄BES2600的轻量级鸿蒙操作系统AIOT开发平台解析之SDK下载和编译
一 鸿蒙系统 华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人.设备.场景有机地联系在一起, 将消费者在全场景生活中接触的多种智能终端实现极速发现.极速连接.硬 ...
- html添加css样式的两种方法
html添加css样式有三种方法,分别为行内式(使用style属性,在特定的HTML标签内使用).内嵌式(style标签把css代码放在特定页面的head部分中).外联式(使用link标签,将外部 ...
- labeImg 遇到闪退问题,TypeError: setValue(self, a0: int): argument 1 has unexpected type 'float'
将python 环境安装为python3.9,然后重新安装labelImg
- Access注入-Cookie注入
Access注入-Cookie注入 1.Cookie简单介绍 2.Cookie注入原理及方法 一.Cookie简单介绍 What is Cookie? 储存在用户本地终端上的数据 类型为"小 ...
- @Autowired和@Resource整理
参考,欢迎点击原文:https://www.ixigua.com/6991282608663593508?id=6945836219422999079&logTag=944f6616c791c ...
- github 镜像地址
亲测可用的 github 镜像地址: https://hub.nuaa.cf , https://hub.fgit.cf
- 记录--vue3中的ref,toRef,toRefs
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. ref的使用 ref 接受一个原始值,返回一个具有响应式的对象,对象有一个value属性,其值就是所传递的原始值. ref是做的一个 ...
- mybatis @Param参数 记录
报错信息 org.apache.ibatis.binding.BindingException: Parameter 'XX' not found. Available parameters are ...