Java 导出 xls 自动转成 xlsx

1. 简介

在Java开发中,经常需要将数据导出为Excel文件。一般来说,我们使用Apache POI库来实现Excel的操作。不过,在较新版本的Excel中,推荐使用xlsx格式代替xls格式。本文将教你如何在Java中导出xls文件,并自动将其转换为xlsx格式。

2. 实现步骤

下面是实现该需求的步骤流程:

stateDiagram
    [*] --> 开始
    开始 --> 导出xls文件
    导出xls文件 --> 转换为xlsx格式
    转换为xlsx格式 --> 完成
    完成 --> [*]

3. 代码实现

3.1 导出xls文件

首先,我们需要导出xls文件。使用Apache POI库可以很方便地实现该功能。以下是导出xls文件的代码,需要使用以下代码导入对应的库:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelExporter {

    public static void main(String[] args) {
        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        // 创建数据行
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello World!");

        try (FileOutputStream outputStream = new FileOutputStream("output.xls")) {
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们首先创建了一个Workbook对象,使用HSSFWorkbook表示xls文件。然后,创建了一个Sheet对象,表示Excel中的一个工作表。在Sheet中,我们创建了一个Row对象,表示Excel中的一行。然后,在该行中创建了一个Cell对象,并设置其值为"Hello World!"。最后,我们将Workbook对象写入到文件中。

3.2 转换为xlsx格式

为了将导出的xls文件转换为xlsx格式,我们可以利用Apache POI库和Apache POI OOXML库中的类和方法。以下是将xls文件转换为xlsx格式的代码:

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelConverter {

    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("output.xls");
             Workbook workbook = new HSSFWorkbook(fis);
             FileOutputStream fos = new FileOutputStream("output.xlsx")) {

            Workbook xssfWorkbook = new XSSFWorkbook();
            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                Sheet sheet = workbook.getSheetAt(i);
                Sheet xssfSheet = xssfWorkbook.createSheet(sheet.getSheetName());

                for (int j = 0; j <= sheet.getLastRowNum(); j++) {
                    Row row = sheet.getRow(j);
                    Row xssfRow = xssfSheet.createRow(j);

                    for (int k = 0; k < row.getLastCellNum(); k++) {
                        Cell cell = row.getCell(k);
                        Cell xssfCell = xssfRow.createCell(k);
                        xssfCell.setCellValue(cell.getStringCellValue());
                    }
                }
            }

            xssfWorkbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们通过FileInputStream读取导出的xls文件,然后创建一个HSSFWorkbook对象。接下来,我们创建一个XSSFWorkbook对象,用于存储将要转换的xlsx文件。然后,遍历xls文件中的每个Sheet,并将其复制到xssfWorkbook中。对于每个Sheet,我们遍历其行和单元格,并将其内容复制到对应的xssfSheet中。最后,将xssfWorkbook写入到文件中,即得到了转换后的xlsx文件。

4. 完成

通过以上步骤,我们成功地实现了将导出的xls文件自动转换为xlsx格式的功能。你现在可以尝试运行这些代码,并根据自己的需求进行修改和扩展。希望本文能对你有所帮助!