使用poi动态导出多级表头和数据
时间: 2024-04-22 19:06:38 浏览: 13
使用POI动态导出多级表头和数据需要以下步骤:
1. 创建Workbook对象,根据文件格式创建HSSFWorkbook或XSSFWorkbook对象。
2. 创建Sheet对象,创建一个新的工作表。
3. 创建CellStyle对象,为单元格设置样式。
4. 创建Row对象,创建行,并在行中创建单元格。
5. 设置表头,使用合并单元格的方式设置多级表头。
6. 设置数据,遍历数据集合,将数据写入单元格中。
7. 输出文件,将Workbook对象输出到文件或输出流中。
以下是一个示例代码:
```java
public void exportExcel(List<List<String>> headerList, List<Map<String, Object>> dataList, OutputStream outputStream) throws IOException {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 设置表头
for (int i = 0; i < headerList.size(); i++) {
List<String> header = headerList.get(i);
Row row = sheet.createRow(i);
for (int j = 0; j < header.size(); j++) {
Cell cell = row.createCell(j);
cell.setCellValue(header.get(j));
}
// 处理多级表头
if (header.size() > 1) {
CellRangeAddress region = new CellRangeAddress(i, i, 0, header.size() - 1);
sheet.addMergedRegion(region);
}
}
// 设置数据
for (int i = 0; i < dataList.size(); i++) {
Map<String, Object> data = dataList.get(i);
Row row = sheet.createRow(i + headerList.size());
for (int j = 0; j < headerList.get(0).size(); j++) {
String key = headerList.get(0).get(j);
Cell cell = row.createCell(j);
cell.setCellValue(String.valueOf(data.get(key)));
}
}
// 输出文件
workbook.write(outputStream);
}
```
调用示例:
```java
List<List<String>> headerList = new ArrayList<>();
List<String> firstHeader = Arrays.asList("姓名", "年龄", "性别");
List<String> secondHeader = Arrays.asList("基本信息", "其他信息");
headerList.add(firstHeader);
headerList.add(secondHeader);
List<Map<String, Object>> dataList = new ArrayList<>();
Map<String, Object> data1 = new HashMap<>();
data1.put("姓名", "张三");
data1.put("年龄", 18);
data1.put("性别", "男");
data1.put("其他信息", "学生");
Map<String, Object> data2 = new HashMap<>();
data2.put("姓名", "李四");
data2.put("年龄", 20);
data2.put("性别", "女");
data2.put("其他信息", "教师");
dataList.add(data1);
dataList.add(data2);
OutputStream outputStream = new FileOutputStream("test.xlsx");
exportExcel(headerList, dataList, outputStream);
outputStream.close();
```