java做一个一对多的excel报表导出
时间: 2024-03-12 07:46:44 浏览: 87
java实现导出excel表
4星 · 用户满意度95%
实现一对多的Excel报表导出可以使用Java中的Apache POI库。下面是一个简单的示例,假设我们要导出一个学校的学生信息,每个学生有多个科目成绩,需要在一个Excel中显示。
首先,我们需要导入POI库:
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
```
然后,我们需要创建一个Workbook对象来表示我们的Excel文件:
```java
Workbook workbook = new XSSFWorkbook();
```
接下来,我们需要创建一个Sheet对象来表示Excel文件中的一个Sheet:
```java
Sheet sheet = workbook.createSheet("学生信息");
```
然后,我们需要编写代码来添加表头和数据。这里我们假设我们有一个List<Student>对象,每个Student对象包含学生的基本信息和多个科目成绩:
```java
List<Student> students = new ArrayList<>();
// 添加学生信息和科目成绩
// 创建表头
Row headerRow = sheet.createRow(0);
Cell headerCell = headerRow.createCell(0);
headerCell.setCellValue("姓名");
headerCell = headerRow.createCell(1);
headerCell.setCellValue("性别");
headerCell = headerRow.createCell(2);
headerCell.setCellValue("年龄");
// 列名从第3列开始
int column = 3;
List<String> subjectNames = new ArrayList<>();
for (Student student : students) {
// 添加学生基本信息
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
Cell cell = row.createCell(0);
cell.setCellValue(student.getName());
cell = row.createCell(1);
cell.setCellValue(student.getGender());
cell = row.createCell(2);
cell.setCellValue(student.getAge());
// 添加科目成绩
for (Score score : student.getScores()) {
String subjectName = score.getSubjectName();
if (!subjectNames.contains(subjectName)) {
// 新科目,添加列名
subjectNames.add(subjectName);
headerCell = headerRow.createCell(column);
headerCell.setCellValue(subjectName);
column++;
}
int columnIndex = subjectNames.indexOf(subjectName) + 3;
cell = row.createCell(columnIndex);
cell.setCellValue(score.getScore());
}
}
```
最后,我们需要将Workbook对象写入到文件中:
```java
try (OutputStream outputStream = new FileOutputStream("学生信息.xlsx")) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
```
这样,我们就完成了一个简单的一对多的Excel报表导出。
阅读全文