hutool导excel 只导出设置别名的字段
时间: 2023-09-15 08:17:58 浏览: 435
蓝凌系统列表页面选择字段导出Excel.zip
可以使用 hutool 的 `ExcelWriter` 工具类结合反射机制实现只导出设置别名的字段。具体步骤如下:
1. 定义一个实体类,使用 `@ExcelAlias` 注解为需要导出的字段设置别名,例如:
```java
public class User {
@ExcelAlias("姓名")
private String name;
@ExcelAlias("年龄")
private Integer age;
// 省略 getter 和 setter 方法
}
```
2. 在程序中创建 `ExcelWriter` 对象,并设置表头别名。例如:
```java
ExcelWriter writer = ExcelUtil.getWriter();
writer.addHeaderAlias("姓名", "name");
writer.addHeaderAlias("年龄", "age");
```
3. 获取需要导出的数据列表,并使用反射机制获取需要导出的字段值。例如:
```java
List<User> userList = getUserList();
for (User user : userList) {
List<Object> row = new ArrayList<>();
Field[] fields = user.getClass().getDeclaredFields();
for (Field field : fields) {
ExcelAlias alias = field.getAnnotation(ExcelAlias.class);
if (alias != null) {
try {
field.setAccessible(true);
Object value = field.get(user);
row.add(value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
writer.writeRow(row);
}
```
完整示例代码如下:
```java
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.annotation.ExcelAlias;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
ExcelWriter writer = ExcelUtil.getWriter();
writer.addHeaderAlias("姓名", "name");
writer.addHeaderAlias("年龄", "age");
List<User> userList = getUserList();
for (User user : userList) {
List<Object> row = new ArrayList<>();
Field[] fields = user.getClass().getDeclaredFields();
for (Field field : fields) {
ExcelAlias alias = field.getAnnotation(ExcelAlias.class);
if (alias != null) {
Object value = ReflectUtil.getFieldValue(user, field);
row.add(value);
}
}
writer.writeRow(row);
}
writer.flush();
writer.close();
}
private static List<User> getUserList() {
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 18));
userList.add(new User("李四", 20));
userList.add(new User("王五", 22));
return userList;
}
@SuppressWarnings("unused")
private static class User {
@ExcelAlias("姓名")
private String name;
@ExcelAlias("年龄")
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
}
```
注意事项:
1. 需要使用 `@SuppressWarnings("unused")` 注解将 `User` 类标记为不使用,否则编译器会提示 `The type Test.User is never used locally` 的警告信息;
2. 需要使用 `field.setAccessible(true)` 将字段的访问权限设置为可访问,否则会抛出 `java.lang.IllegalAccessException: class Test cannot access a member of class xxx with modifiers "private"` 的异常信息。
阅读全文