java poi写一个Excel导出,导出对象类型是List<People> peopleList有5个属性, People对象中有两个属性为List<Son> sonList,List<dog> dogList。导出的Excel表头为peopleList中三个普通字段和List<Son>、List<dog>为一级表头,sonList、dogList中的属性为List<Son> sonList、List<dog> dogList下的二级表头,
时间: 2023-07-15 09:11:28 浏览: 95
好的,我可以帮您编写Java代码实现该功能。需要使用Apache POI库来操作Excel文件。
首先,您需要创建一个People类和Son类、Dog类来存储数据。People类中包含五个属性,其中两个属性为List<Son>和List<Dog>。Son类和Dog类中各有若干个属性。
People.java
```
public class People {
private String name;
private int age;
private String gender;
private List<Son> sonList;
private List<Dog> dogList;
// 省略 getter 和 setter 方法
}
```
Son.java
```
public class Son {
private String name;
private int age;
// 省略 getter 和 setter 方法
}
```
Dog.java
```
public class Dog {
private String name;
private String breed;
// 省略 getter 和 setter 方法
}
```
接下来,您需要编写导出Excel的代码。具体实现如下:
```
public static void exportToExcel(List<People> peopleList, OutputStream outputStream) throws IOException {
// 创建一个新的工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个新的工作表
Sheet sheet = workbook.createSheet("People List");
// 定义表头
Row headerRow = sheet.createRow(0);
Cell cell = headerRow.createCell(0);
cell.setCellValue("姓名");
cell = headerRow.createCell(1);
cell.setCellValue("年龄");
cell = headerRow.createCell(2);
cell.setCellValue("性别");
cell = headerRow.createCell(3);
cell.setCellValue("儿子");
cell = headerRow.createCell(6);
cell.setCellValue("狗狗");
// 定义二级表头
Row subHeaderRow = sheet.createRow(1);
cell = subHeaderRow.createCell(3);
cell.setCellValue("儿子姓名");
cell = subHeaderRow.createCell(4);
cell.setCellValue("儿子年龄");
cell = subHeaderRow.createCell(6);
cell.setCellValue("狗狗名字");
cell = subHeaderRow.createCell(7);
cell.setCellValue("狗狗品种");
// 写入数据
int rowNum = 2;
for (People people : peopleList) {
Row row = sheet.createRow(rowNum++);
// 写入普通字段
cell = row.createCell(0);
cell.setCellValue(people.getName());
cell = row.createCell(1);
cell.setCellValue(people.getAge());
cell = row.createCell(2);
cell.setCellValue(people.getGender());
// 写入List<Son>属性
List<Son> sonList = people.getSonList();
for (Son son : sonList) {
row = sheet.createRow(rowNum++);
cell = row.createCell(3);
cell.setCellValue(son.getName());
cell = row.createCell(4);
cell.setCellValue(son.getAge());
}
// 写入List<Dog>属性
List<Dog> dogList = people.getDogList();
for (Dog dog : dogList) {
row = sheet.createRow(rowNum++);
cell = row.createCell(6);
cell.setCellValue(dog.getName());
cell = row.createCell(7);
cell.setCellValue(dog.getBreed());
}
}
// 调整列宽
for (int i = 0; i < 8; i++) {
sheet.autoSizeColumn(i);
}
// 将工作簿写入输出流
workbook.write(outputStream);
}
```
以上代码中,我们首先创建了一个新的工作簿和工作表,并定义了表头和二级表头。然后,利用循环遍历People对象的List<Son>和List<Dog>属性,将数据写入Excel文件中。
最后,我们调用`workbook.write(outputStream)`方法将工作簿写入输出流中,完成导出Excel的操作。
使用示例:
```
List<People> peopleList = new ArrayList<>();
// 添加 People 对象
// ...
// 创建输出流
OutputStream outputStream = new FileOutputStream("people.xlsx");
// 导出 Excel
exportToExcel(peopleList, outputStream);
// 关闭输出流
outputStream.close();
```
阅读全文