Java 导出 Excel 文件流
1. 简介
在日常的开发工作中,我们经常需要将数据导出为 Excel 文件,方便用户查看和分析数据。在 Java 中,我们可以使用一些开源库来实现 Excel 文件的导出功能,例如 Apache POI。
本文将介绍如何使用 Java 导出 Excel 文件流,并提供相应的代码示例。
2. 准备工作
在开始之前,我们需要准备以下工具和环境:
- JDK:确保已经安装了 Java 开发工具包。
- IDE:推荐使用 IntelliJ IDEA 或 Eclipse 等 Java 开发工具。
- 依赖库:需要引入 Apache POI 的相关依赖库。
3. 导出 Excel 文件流的步骤
3.1. 创建工作簿和工作表
在使用 Apache POI 进行 Excel 文件操作之前,我们需要先创建一个工作簿(Workbook)和一个工作表(Sheet)。工作簿表示整个 Excel 文件,而工作表则是文件中的一个表格。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
// 创建工作簿和工作表
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
3.2. 添加表头
接下来,我们可以为工作表添加表头信息,表头通常是数据的标题或字段名称。
// 创建表头样式
CellStyle headerCellStyle = workbook.createCellStyle();
headerCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 创建表头行
Row headerRow = sheet.createRow(0);
// 添加表头数据
Cell headerCell = headerRow.createCell(0);
headerCell.setCellValue("字段1");
headerCell.setCellStyle(headerCellStyle);
headerCell = headerRow.createCell(1);
headerCell.setCellValue("字段2");
headerCell.setCellStyle(headerCellStyle);
// ...
3.3. 添加数据行
接下来,我们可以逐行添加数据到工作表中。
// 创建数据行样式
CellStyle dataCellStyle = workbook.createCellStyle();
dataCellStyle.setBorderBottom(BorderStyle.THIN);
dataCellStyle.setBorderTop(BorderStyle.THIN);
dataCellStyle.setBorderLeft(BorderStyle.THIN);
dataCellStyle.setBorderRight(BorderStyle.THIN);
// 添加数据到工作表
int rowNum = 1;
for (DataObject data : dataList) {
Row dataRow = sheet.createRow(rowNum++);
Cell dataCell = dataRow.createCell(0);
dataCell.setCellValue(data.getField1());
dataCell.setCellStyle(dataCellStyle);
dataCell = dataRow.createCell(1);
dataCell.setCellValue(data.getField2());
dataCell.setCellStyle(dataCellStyle);
// ...
}
3.4. 导出文件流
最后,我们可以将工作簿中的数据导出为文件流,供用户下载。
// 导出文件流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
byte[] bytes = outputStream.toByteArray();
4. 完整示例代码
下面是一个完整的示例代码,演示了如何使用 Java 导出 Excel 文件流:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExcelExporter {
public static void main(String[] args) {
List<DataObject> dataList = new ArrayList<>();
dataList.add(new DataObject("Value1", "Value2"));
dataList.add(new DataObject("Value3", "Value4"));
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
CellStyle headerCellStyle = workbook.createCellStyle();
headerCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Row headerRow = sheet.createRow(0);
Cell headerCell = headerRow.createCell(0);
headerCell.setCellValue("字段1");
headerCell.setCellStyle(headerCellStyle);
headerCell = headerRow.createCell(1);
headerCell.setCellValue("字段2");
headerCell.setCellStyle(headerCellStyle);
CellStyle dataCellStyle = workbook.createCellStyle();
dataCellStyle.setBorderBottom(BorderStyle.THIN);
dataCellStyle.setBorderTop(BorderStyle.THIN);
dataCellStyle.setBorderLeft(BorderStyle.THIN);
dataCellStyle.setBorderRight(BorderStyle.THIN);
int rowNum = 1;
for (DataObject data : dataList) {
Row dataRow = sheet.createRow(rowNum++);
Cell dataCell = dataRow.createCell(0);
dataCell.setCellValue(data.getField1());
dataCell.setCellStyle(dataCellStyle);
data