要实现将Java对象数组导出成Excel文档,我们可以借助Apache POI库。下面是具体的攻略:
1. 引入POI依赖
首先需要在项目中引入POI依赖。可以使用Maven或Gradle构建工具,将以下依赖添加到项目中:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
2. 创建一个Excel文档
在JAVA中,创建一个Excel文档主要分为以下几个步骤:
2.1 创建一个工作簿
首先,我们需要创建一个工作簿,用来管理Excel文档中的所有的sheet页。可以使用以下代码创建一个新的工作簿对象:
Workbook workbook = new XSSFWorkbook();
2.2 创建一个工作表
创建一个Sheet页,可以通过调用工作簿的createSheet方法来实现。可以使用以下代码创建一个新的Sheet页对象:
Sheet sheet = workbook.createSheet("Sheet1");
2.3 设置表头
Excel表格中通常会有一些列作为表头,用来说明每列所包含的内容。可以使用以下代码设置表头(以一个对象数组为例):
String[] headers = {"姓名", "年龄", "性别"};
Row row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
2.4 填充数据
将Java对象数组导出到Excel文档中,需要把数组中的数据按照给定的格式填充到Excel文档中。可以使用以下代码实现:
for (int i = 0; i < data.length; i++) {
// 创建一行
Row row = sheet.createRow(i+1);
Object obj = data[i];
for (int j = 0; j < fieldNames.length; j++) {
// 获取对象属性值
Object value = getObjectFieldValue(obj, fieldNames[j]);
Cell cell = row.createCell(j);
if (value instanceof String) {
cell.setCellValue((String)value);
} else if (value instanceof Integer) {
cell.setCellValue((Integer)value);
} else if (value instanceof Double) {
cell.setCellValue((Double)value);
} else {
// 处理其他类型的属性
}
}
}
这里的getObjectFieldValue
方法是自定义方法,用来获取对象属性值。
2.5 保存Excel文档
数据填充完毕后,需要将Excel文档保存到本地。可以使用以下代码将工作簿写入到文件流中:
FileOutputStream outputStream = new FileOutputStream("output.xlsx");
workbook.write(outputStream);
outputStream.close();
示例
示例一
对于一个简单的对象数组,可以使用以下代码导出到Excel文档:
public class Person {
private String name;
private int age;
private String gender;
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
public static void main(String[] args) throws Exception {
// 创建一个简单的Person对象数组
Person[] persons = {
new Person("Tom", 18, "男"),
new Person("Alice", 20, "女"),
new Person("Bob", 22, "男")
};
// 定义导出的属性
String[] fieldNames = {"name", "age", "gender"};
// 创建一个工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个Sheet页
Sheet sheet = workbook.createSheet("Sheet1");
// 设置表头
String[] headers = {"姓名", "年龄", "性别"};
Row row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
// 填充数据
for (int i = 0; i < persons.length; i++) {
Row dataRow = sheet.createRow(i+1);
Person person = persons[i];
for (int j = 0; j < fieldNames.length; j++) {
Object value = getObjectFieldValue(person, fieldNames[j]);
Cell cell = dataRow.createCell(j);
if (value instanceof String) {
cell.setCellValue((String)value);
} else if (value instanceof Integer) {
cell.setCellValue((Integer)value);
} else if (value instanceof Double) {
cell.setCellValue((Double)value);
} else {
// 处理其他类型的属性
}
}
}
// 保存Excel文档
FileOutputStream outputStream = new FileOutputStream("output.xlsx");
workbook.write(outputStream);
outputStream.close();
}
示例二
对于一个复杂的对象数组,可以使用以下代码导出到Excel文档:
public class User {
private String name;
private int age;
private List<String> hobbies;
public User(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
this.hobbies = hobbies;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getHobbies() {
return hobbies;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
}
public static void main(String[] args) throws Exception {
// 创建一个复杂的User对象数组
List<User> users = new ArrayList<>();
users.add(new User("Tom", 18, Arrays.asList("足球", "音乐")));
users.add(new User("Alice", 20, Arrays.asList("绘画")));
users.add(new User("Bob", 22, Arrays.asList("足球", "羽毛球")));
// 定义导出的属性
String[] fieldNames = {"name", "age", "hobbies"};
// 创建一个工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个Sheet页
Sheet sheet = workbook.createSheet("Sheet1");
// 设置表头
String[] headers = {"姓名", "年龄", "爱好"};
Row row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
// 填充数据
for (int i = 0; i < users.size(); i++) {
Row dataRow = sheet.createRow(i+1);
User user = users.get(i);
for (int j = 0; j < fieldNames.length; j++) {
Object value = getObjectFieldValue(user, fieldNames[j]);
Cell cell = dataRow.createCell(j);
if (value instanceof String) {
cell.setCellValue((String)value);
} else if (value instanceof Integer) {
cell.setCellValue((Integer)value);
} else if (value instanceof List) {
List<String> list = (List<String>)value;
StringBuilder sb = new StringBuilder();
for (String item : list) {
sb.append(item).append(",");
}
cell.setCellValue(sb.substring(0, sb.length()-1));
} else {
// 处理其他类型的属性
}
}
}
// 保存Excel文档
FileOutputStream outputStream = new FileOutputStream("output.xlsx");
workbook.write(outputStream);
outputStream.close();
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现把对象数组通过excel方式导出的功能 - Python技术站