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 ...
随机推荐
- 11 .Codeforces Round 891 (Div. 3)E. Power of Points(推公式+前缀和优化)
E. Power of Points 题解参考 #include <bits/stdc++.h> #define int long long #define rep(i, a, b) fo ...
- css class 操作列 按钮 之间加 竖线 | class="your-handleBtn" :last-child::after
思路:botton 加一个class 每个右边加个竖线,最后一个不加. 用起来很方便 <template slot="handle" slot-scope="{ r ...
- thinkphp phpstorm xdebug 环境配置
php5.6 环境配置 phpStudy 开启 Apache 网站 的php版本选择7的 (7的可能自己需要装一下) 获取xdebug前的 检查准备 打开 http://localhost:8033/ ...
- 【图算法】构建消息传递网络教程 Creating Message Passing Networks by Pytorch-geometric
一.背景 将卷积运算推广到不规则域通常表示为邻局聚合(neighborhood aggregation)或消息传递(neighborhood aggregation)模式. \(\mathbf{x}^ ...
- Python isinstance() 函数含义及用法解析
描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关 ...
- python基础笔记((1)
逻辑与或非用的是and or not. 除法即使整除结果也是浮点数 地板除//结果一定是整数. 内存中的字符串是Unicode编码,str.encode('utf-8 or ascii')将class ...
- 建筑、工程和施工产业中的3D可视化
3D视觉效果是传达想法,概念或设计的强大工具,它也用于在概念阶段推销该想法. AEC行业的可视化已经走了很长一段路,从将设计提交给客户进行批准,现在用于项目的每个阶段,从项目投标,获得客户和理事会的批 ...
- django(ORM)
一 单表(增.删.改.查) 1 测试脚本 ''' 只想测试django中的某一个py文件内容,那么可以不用书写前后端交互的形式 而是直接写一个测试脚本即可 ''' # 脚本代码无论是写在应用下的tes ...
- 手把手制作mobileconfig文件,在iphone上创建h5网页桌面图标
1,下载mobileconfig文件制作工具 下载地址:点击关注公众号,回复appicon, 获取工具的下载地址 新建配置描述文件,填写通用信息 填写Web Clip信息 点击菜单栏的导出,注意这里一 ...
- 优化您的部署:Docker 镜像最佳实践
介绍 在快速发展的软件开发和部署领域,Docker 已成为容器化的强大工具,为打包.分发和运行应用程序提供了一种标准化的高效方式.Docker 镜像在这一过程中发挥着至关重要的作用,是容器化应用程序的 ...