Java实现xlsx转换为csv文件

在日常的数据处理工作中,我们常常需要将Excel文件(格式为.xlsx)转换为CSV文件,以便在其他应用程序中轻松使用这些数据。CSV(逗号分隔值)文件是一种简单的文本文件格式,广泛用于数据交换。本文将介绍如何使用Java实现这一转换,并提供详细的代码示例。

1. 技术栈

为了实现.xlsx文件到CSV的转换,我们将使用Apache POI库。Apache POI是一个强大的Java库,能够读写Microsoft Office格式文件。

依赖引入

首先,确保在你的项目中引入了Apache POI库。在Maven项目中,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>
<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>
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>5.0.4</version>
</dependency>

2. 转换逻辑

在转换过程中,我们需要以下步骤:

  1. 读取.xlsx文件。
  2. 提取每一张工作表中的数据。
  3. 将数据写入CSV文件。

代码示例

以下是实现上述逻辑的代码示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;

public class XlsxToCsvConverter {

    public static void main(String[] args) {
        String inputFilePath = "input.xlsx";
        String outputFilePath = "output.csv";

        try {
            convertXlsxToCsv(inputFilePath, outputFilePath);
            System.out.println("转换成功!");
        } catch (IOException e) {
            System.err.println("转换失败: " + e.getMessage());
        }
    }

    public static void convertXlsxToCsv(String inputFilePath, String outputFilePath) throws IOException {
        Workbook workbook = new XSSFWorkbook(new FileInputStream(inputFilePath));
        BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath));

        for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
            Sheet sheet = workbook.getSheetAt(i);
            for (Row row : sheet) {
                StringBuilder sb = new StringBuilder();
                for (Cell cell : row) {
                    if (sb.length() > 0) {
                        sb.append(","); // 添加逗号分隔
                    }
                    sb.append(getCellValue(cell));
                }
                writer.write(sb.toString());
                writer.newLine();
            }
        }
        writer.close();
        workbook.close();
    }

    public static String getCellValue(Cell cell) {
        if (cell == null) {
            return "";
        }
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                return String.valueOf(cell.getNumericCellValue());
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            default:
                return "";
        }
    }
}

代码分析

  • convertXlsxToCsv方法负责读取.xlsx文件并写入CSV文件。它遍历每一张工作表和每一行,然后将每个单元格的值拼接成逗号分隔的字符串。
  • getCellValue方法根据单元格类型返回相应的值。

3. 状态图

以下是表示转换过程的状态图:

stateDiagram
    [*] --> 开始
    开始 --> 读取文件
    读取文件 --> 遍历工作表
    遍历工作表 --> 遍历行
    遍历行 --> 读取单元格
    读取单元格 --> 写入CSV
    写入CSV --> 遍历行
    遍历行 --> 结束
    结束 --> [*]

4. 总结

本文介绍了如何使用Java和Apache POI库将.xlsx文件转换为CSV格式。通过以上代码示例,你可以轻松实现这种转换功能。CSV文件具有更好的兼容性,并且容易与其他数据处理工具进行交互。希望这篇文章对你在数据处理过程中有所帮助!如果你有任何问题或建议,请在评论中与我们分享。