Java导出Excel增加序号列

在Java中,我们经常会遇到需要将数据导出为Excel文件的需求。而有时候,我们希望在导出的Excel文件中增加一个序号列,以方便查看和排序数据。本文将介绍如何使用Java导出Excel并增加序号列。

准备工作

在开始之前,我们需要引入一个用于操作Excel文件的Java库。这里我们选择使用Apache POI库。首先,我们需要在项目的pom.xml文件中添加以下依赖项:

<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>

接下来,我们需要创建一个Java类来处理导出Excel的逻辑。我们可以使用Spring Boot框架来简化开发过程。首先,我们需要在pom.xml文件中添加以下依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后,我们创建一个名为ExcelExporter的Java类,并使用@RestController注解将其声明为一个Web服务:

@RestController
public class ExcelExporter {
    // 导出Excel的逻辑代码
}

导出Excel并增加序号列

为了演示目的,我们假设我们有一个名为dataList的列表,其中包含了要导出的数据。每个数据项包含了姓名和年龄两个字段。我们要在导出的Excel文件中增加一个序号列,并显示每个数据项的序号。

首先,我们需要创建一个Workbook对象,用于保存Excel文件的内容:

Workbook workbook = new XSSFWorkbook();

然后,我们创建一个Sheet对象,并指定其名称:

Sheet sheet = workbook.createSheet("Data");

接下来,我们创建一个Row对象,并在第一行中创建列标题:

Row headerRow = sheet.createRow(0);
Cell headerCell = headerRow.createCell(0);
headerCell.setCellValue("序号");
headerCell = headerRow.createCell(1);
headerCell.setCellValue("姓名");
headerCell = headerRow.createCell(2);
headerCell.setCellValue("年龄");

然后,我们遍历dataList列表,并将其中的数据写入Excel文件中:

for (int i = 0; i < dataList.size(); i++) {
    Row dataRow = sheet.createRow(i + 1);
    Cell dataCell = dataRow.createCell(0);
    dataCell.setCellValue(i + 1);
    dataCell = dataRow.createCell(1);
    dataCell.setCellValue(dataList.get(i).getName());
    dataCell = dataRow.createCell(2);
    dataCell.setCellValue(dataList.get(i).getAge());
}

最后,我们将Workbook对象写入一个文件中,并关闭文件流:

try (FileOutputStream outputStream = new FileOutputStream("data.xlsx")) {
    workbook.write(outputStream);
    workbook.close();
}

完整代码示例

下面是完整的Java类代码示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@RestController
public class ExcelExporter {

    @GetMapping("/export")
    public String exportExcel() throws IOException {
        List<Data> dataList = getDataList();

        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Data");

        Row headerRow = sheet.createRow(0);
        Cell headerCell = headerRow.createCell(0);
        headerCell.setCellValue("序号");
        headerCell = headerRow.createCell(1);
        headerCell.setCellValue("姓名");
        headerCell = headerRow.createCell(2);
        headerCell.setCellValue("年龄");

        for (int i = 0; i < dataList.size(); i++) {
            Row dataRow = sheet.createRow(i + 1);
            Cell dataCell = dataRow.createCell(0);
            dataCell.setCellValue(i + 1);
            dataCell = dataRow.createCell(1);
            dataCell.setCellValue(dataList.get(i).getName());
            dataCell = dataRow.createCell(2);
            dataCell.setCellValue(dataList.get(i).getAge());
        }

        try (FileOutputStream outputStream = new FileOutputStream("data.xlsx")) {
            workbook.write(outputStream);
            workbook.close();
        }

        return "Excel exported successfully!";