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 ...
随机推荐
- 5、mysql优化--索引使用情况、索引的结构
避免索引失效 1). 全值匹配 ,对索引中所有列都指定具体值. 2). 最左前缀法则 如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始,并且不跳过索引中的列. 3). 范围查询右边的 ...
- api网关介绍
1.什么是网关 API网关是一个系统的唯一入口. 是众多分布式服务唯一的一个出口. 它做到了物理隔离,内网服务只有通过网关才能暴露到外网被别人访问. 简而言之:网关就是你家的大门 2.提供了哪些功能 ...
- TLS原理与实践(二)
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在上一篇博客中,我们通过<一文读懂TLS1.2协议](ht ...
- Sagas论文原文读后总结
一.引子 分布式事务组件seata最近社区很活跃,刚好公司有对接seata的计划.刚好借此机会,彻底了解下seata的价值.其中有一个比较特殊的模式叫SAGA模式,听起来就很懵逼,按照官网的介绍起源于 ...
- 聊聊CWE 4.14 与 ISA/IEC 62443中,如何保障工业软件的安全性
本文分享自华为云社区<CWE 4.14 与 ISA/IEC 62443>,作者:Uncle_Tom. 1. 序言 随着 5G 的应用,物联的网发展,越来越多的自动化控制系统.云服务在工业控 ...
- Zabbix“专家坐诊”第198期问答汇总
问题一 Q:请问一下,自带的思科SNMP交换机模板,怎么不监控down的接口? A1:这种一般在自动发现规则里加个过滤器,过滤出IFSTATUS匹配(1|3)的就能实现只发现up的端口了. A2: 1 ...
- vscode vue 组件定位插件 webpack-code-inspector-plugin -- 强烈推荐 Alt+Shift+鼠标左键
作用 alt + shift + 鼠标左键 自动跳转 vscode项目的组件代码 项目地址 https://github.com/zh-lx/code-inspector/blob/main/pack ...
- debian卡顿,造成用户注销现象的原因以及解决方法
现象:当时电脑正在运行,宝塔面板安装初始化应用,一个浏览器,一个虚拟机 解决方法:目前还不清楚--是不是负载过大?好奇怪!
- 基于泰凌微TLSR8258芯片的智能安全头盔解决方案开发之自制IOT微型OS操作系统
一 前记 泰凌微的芯片在国内应用非常广泛,825x作为一个出货的主力芯片,该芯片有着性价比高,功耗低,功能强大等特色. 非常适合做一些比较小的穿戴式设备,比如,手环,智能安全帽等.笔者对这颗芯片用了长 ...
- 如何利用云流送(Cloud Streaming)构造一个全三维、沉浸式的数字化虚拟景区
随着科技的发展,数字化虚拟景区已经离我们越来越近!所谓数字化虚拟景区,即利用现代计算机数字技术,模拟真实景区,实现在计算机和互联网上再现景区的真实场景. 数字化虚拟景区一般包含以下内容: 数字电子沙盘 ...