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 个字符。然后,我们创建了两个单元格样式,一个用于设置年龄列的数字格式,另一个用