Java 按指定格式进行 Excel 导出
Excel 是一种常见的电子表格软件,被广泛用于数据处理和数据分析。在 Java 程序中,我们可以使用 Apache POI 库来操作 Excel 文件。本文将介绍如何使用 Java 对 Excel 进行导出,并按照指定的格式进行数据展示。
1. 准备工作
在开始之前,我们需要引入 Apache POI 的相关依赖。可以在 Maven 配置文件中添加以下依赖项:
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
2. 导出 Excel
首先,我们需要创建一个 Excel 文档并添加表头和数据。以下是一个简单的示例代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelExporter {
public static void exportData() {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("数据表");
// 创建表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
headerRow.createCell(2).setCellValue("性别");
// 创建数据行
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("张三");
dataRow.createCell(1).setCellValue(25);
dataRow.createCell(2).setCellValue("男");
// 将数据写入文件
try (FileOutputStream fos = new FileOutputStream("data.xlsx")) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
// 关闭工作簿
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
exportData();
}
}
以上代码创建了一个名为 "数据表" 的工作表,并添加了姓名、年龄和性别的表头和一行具体的数据。最终的 Excel 文件名为 "data.xlsx"。
3. 按指定格式导出数据
现在,我们将介绍如何按照指定的格式对导出的 Excel 数据进行展示。假设我们需要设置姓名列的宽度为 20 个字符,年龄列为数字格式,性别列为文本格式。以下是修改后的代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelExporter {
public static void exportData() {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("数据表");
// 创建表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
headerRow.createCell(2).setCellValue("性别");
// 创建数据行
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("张三");
dataRow.createCell(1).setCellValue(25);
dataRow.createCell(2).setCellValue("男");
// 设置列宽
sheet.setColumnWidth(0, 20 * 256);
// 设置单元格格式
CellStyle ageCellStyle = workbook.createCellStyle();
ageCellStyle.setDataFormat(workbook.createDataFormat().getFormat("0"));
dataRow.getCell(1).setCellStyle(ageCellStyle);
CellStyle genderCellStyle = workbook.createCellStyle();
genderCellStyle.setDataFormat(workbook.createDataFormat().getFormat("text"));
dataRow.getCell(2).setCellStyle(genderCellStyle);
// 将数据写入文件
try (FileOutputStream fos = new FileOutputStream("data.xlsx")) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
// 关闭工作簿
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
exportData();
}
}
在上述代码中,我们通过 setColumnWidth
方法设置了姓名列的宽度为 20 个字符。然后,我们创建了两个单元格样式,一个用于设置年龄列的数字格式,另一个用