在Java中导出数据为Excel文件通常使用Apache POI库。Apache POI是一个开源库,专门用于操作Microsoft Office格式的文档,包括Excel文件(.xls 和 .xlsx)。下面是如何使用Apache POI来导出数据为Excel文件的一个完整示例。
1. 添加依赖
首先,确保你的项目中包含了Apache POI的依赖。如果你使用的是Maven,可以在pom.xml
中添加以下依赖
<dependencies>
<!-- Apache POI Excel (xlsx) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version> <!-- 版本号可根据需要选择 -->
</dependency>
<!-- Apache POI Excel 97-2003 (xls) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version> <!-- 版本号可根据需要选择 -->
</dependency>
<!-- Apache POI (common) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version> <!-- 版本号可根据需要选择 -->
</dependency>
<!-- 开发时需要的支持类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
如果你使用的是Gradle,可以添加类似的依赖。
2. 导出数据为Excel
假设你有一些数据需要导出为Excel文件,可以使用Apache POI来创建工作簿、工作表和单元格,并将数据填充到Excel文件中。
示例代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
public class ExcelExportExample {
public static void main(String[] args) throws IOException {
// 模拟一些数据
List<String[]> data = new ArrayList<>();
data.add(new String[]{"ID", "Name", "Age"});
data.add(new String[]{"1", "Alice", "30"});
data.add(new String[]{"2", "Bob", "25"});
data.add(new String[]{"3", "Charlie", "35"});
// 创建一个工作簿(Excel文件)
Workbook workbook = new XSSFWorkbook();
// 创建一个工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 填充数据到Excel中
int rowNum = 0;
for (String[] rowData : data) {
Row row = sheet.createRow(rowNum++);
int colNum = 0;
for (String cellData : rowData) {
Cell cell = row.createCell(colNum++);
cell.setCellValue(cellData);
}
}
// 输出到文件
try (FileOutputStream fileOut = new FileOutputStream("exported_data.xlsx")) {
workbook.write(fileOut);
}
// 关闭工作簿
workbook.close();
System.out.println("Excel文件导出成功!");
}
}
3. 代码解释
- 创建Workbook:
Workbook
是Excel文件的顶层对象。在这里,我们使用XSSFWorkbook
来创建一个.xlsx文件(Excel 2007及之后的版本)。如果你需要生成.xls格式的文件,可以使用HSSFWorkbook
。 - 创建Sheet:
Sheet
对象代表Excel中的工作表。我们通过workbook.createSheet("Sheet1")
创建了一个名为"Sheet1"的工作表。 - 创建Row:Excel中的每一行由
Row
对象表示。我们通过sheet.createRow(rowNum)
创建了一行,并将数据填充到该行。 - 创建Cell:Excel中的每个单元格由
Cell
对象表示。通过row.createCell(colNum)
创建单元格,并使用cell.setCellValue(cellData)
为其赋值。 - 写入文件:
FileOutputStream
用于将生成的Excel文件写入到磁盘。 - 关闭资源:完成操作后,记得关闭
workbook
来释放资源。
4. 更多定制化操作
- 设置单元格样式:你可以设置单元格的字体、颜色、对齐方式等。
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
row.getCell(0).setCellStyle(style); // 设置样式
自动调整列宽:可以通过sheet.autoSizeColumn(colNum)
来自动调整列宽。
for (int i = 0; i < rowData.length; i++) {
sheet.autoSizeColumn(i); // 自动调整列宽
}
日期格式化:如果数据中包含日期,可以使用DataFormat
来设置日期格式。
CellStyle dateStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd"));
row.getCell(1).setCellStyle(dateStyle);
5. 导出Excel为.xls格式
如果需要导出为.xls格式的文件,可以使用HSSFWorkbook
代替XSSFWorkbook
:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
Workbook workbook = new HSSFWorkbook(); // 使用HSSFWorkbook创建.xls格式的Excel文件
6. 总结
使用Apache POI进行Excel导出相对简单。通过创建Workbook
、Sheet
、Row
和Cell
对象,你可以灵活地构建Excel文件。如果需要更复杂的格式化或数据处理,可以进一步定制样式、格式等。