Java轻松实现Excel与CSV格式互转(含批量转换)

 更新时间:2025年09月11日 08:19:07   作者:用户372157426135  
在 Java 开发中,经常会遇到需要在 Excel 和 CSV 文件之间进行数据转换的场景,本文将分享如何在 Java 中实现单文件和批量的 Excel 与 CSV 转换方法,希望对大家有所帮助

在 Java 开发中,经常会遇到需要在 Excel 和 CSV 文件之间进行数据转换的场景。CSV 格式简单轻量,便于系统间数据交换和快速处理;而 Excel 格式支持丰富的表格样式、公式和多工作表功能,便于分析和报表生成。

不管是将 Excel 数据导出为 CSV 提供给其他系统,还是将 CSV 文件导入 Excel 以便分析,掌握高效的 Excel 转 CSV 以及 CSV 转 Excel 方法都是开发者必备技能。本文将分享如何在 Java 中实现单文件和批量的 Excel 与 CSV 转换方法,包含完整可运行的示例代码。

一、准备环境

Java 本身不直接提供完整的 Excel 操作接口,因此通常需要借助第三方库来处理。Spire.XLS for Java 是一个功能完善的 Java Excel 库,支持读取、写入和转换 Excel 文件,并且能够直接将 Excel 文件转换为 CSV,也能将 CSV 数据生成 Excel 文件。其 API 简单直观,非常适合开发者在项目中使用。

在开始操作前,需要在项目中引入 Spire.XLS for Java 的依赖。如果使用 Maven,可以在 pom.xml 中添加:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>15.8.3</version>
    </dependency>
</dependencies>

安装好依赖后,就可以开始进行 Excel 与 CSV 的转换。

二、Excel 转 CSV

将 Excel 文件转换为 CSV 通常是最常见的需求,尤其是当需要将数据导入数据库或提供给其他系统处理时。操作步骤主要包括:加载 Excel 文件、计算公式、获取工作表、导出为 CSV 文件。

下面是一个简单示例:

import com.spire.xls.*;
import java.nio.charset.Charset;

public class ExcelToCSV {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("test.xlsx");
        workbook.calculateAllValue();
        Worksheet sheet = workbook.getWorksheets().get(0);
        sheet.saveToFile("ExcelToCSV.csv", ",", Charset.forName("UTF-8"));
    }
}

上述代码中,Workbook.loadFromFile 可加载 .xls 或 .xlsx 文件,saveToFile 方法可直接指定输出格式为 CSV,无需手动解析每个单元格。对于包含多个工作表的 Excel 文件,需要遍历每个工作表,并将其分别保存为 CSV 文件。

三、CSV 转 Excel

将 CSV 文件导入 Excel 便于统计分析或生成报表。Spire.XLS 提供了灵活的方法来读取 CSV,并且可自动调整格式和转换后的 Excel 文件的行高和列宽。

import com.spire.xls.*;
import java.util.EnumSet;

public class CSVToExcel {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("sample.csv", ",", 1, 1);
        Worksheet sheet = workbook.getWorksheets().get(0);
        sheet.getCellRange("A1:D6").setIgnoreErrorOptions(EnumSet.of(IgnoreErrorType.NumberAsText));
        sheet.getAllocatedRange().autoFitColumns();
        sheet.getAllocatedRange().autoFitRows();
        workbook.saveToFile("CSVToExcel.xlsx", ExcelVersion.Version2013);
    }
}

通过忽略错误和自动调整列宽行高,可以确保生成的 Excel 文件美观且易读,同时避免常见错误提示干扰。

四、处理特殊情况

字符编码问题:CSV 文件可能使用不同的编码格式(如 UTF-8、GBK),需要确保读取和保存时使用一致编码。

大文件处理:Excel 或 CSV 文件较大时,可以分批处理,避免内存占用过高。

多工作表转换:如果 Excel 文件包含多个工作表,可以通过循环遍历工作表,分别生成多个 CSV 文件。

五、批量 Excel 和 CSV 相互转换

批量 Excel 转 CSV

import com.spire.xls.*;
import java.io.File;
import java.nio.charset.Charset;

public class BatchExcelToCSV {
    public static void main(String[] args) {
        File folder = new File("excel_files");
        File[] files = folder.listFiles((dir, name) -> name.endsWith(".xls") || name.endsWith(".xlsx"));
        for (File file : files) {
            try {
                Workbook workbook = new Workbook();
                workbook.loadFromFile(file.getAbsolutePath());
                workbook.calculateAllValue();
                Worksheet sheet = workbook.getWorksheets().get(0);
                String csvFile = "csv_output/" + file.getName().replaceAll("\.xls[x]?$", ".csv");
                sheet.saveToFile(csvFile, ",", Charset.forName("UTF-8"));
                System.out.println(file.getName() + " 已转换为 CSV");
            } catch (Exception e) {
                System.err.println(file.getName() + " 转换失败:" + e.getMessage());
            }
        }
    }
}

批量 CSV 转 Excel

import com.spire.xls.*;
import java.io.File;
import java.util.EnumSet;

public class BatchCSVToExcel {
    public static void main(String[] args) {
        File folder = new File("csv_files");
        File[] files = folder.listFiles((dir, name) -> name.endsWith(".csv"));
        for (File file : files) {
            try {
                Workbook workbook = new Workbook();
                workbook.loadFromFile(file.getAbsolutePath(), ",", 1, 1);
                Worksheet sheet = workbook.getWorksheets().get(0);
                sheet.getCellRange("A1:" + sheet.getAllocatedRange().getLastRow() + sheet.getAllocatedRange().getLastColumn())
                     .setIgnoreErrorOptions(EnumSet.of(IgnoreErrorType.NumberAsText));
                sheet.getAllocatedRange().autoFitColumns();
                sheet.getAllocatedRange().autoFitRows();
                String excelFile = "excel_output/" + file.getName().replace(".csv", ".xlsx");
                workbook.saveToFile(excelFile, ExcelVersion.Version2013);
                System.out.println(file.getName() + " 已转换为 Excel");
            } catch (Exception e) {
                System.err.println(file.getName() + " 转换失败:" + e.getMessage());
            }
        }
    }
}

通过批量处理,可以一次性完成大量文件的转换,提高开发效率。

六、总结

使用 Java 实现 Excel 与 CSV 的相互转换,可以极大地提高数据处理效率。借助 Spire.XLS for Java,开发者可以方便地完成 Excel 与 CSV 的加载、保存和格式转换,而无需手动解析单元格或编写复杂逻辑。

到此这篇关于Java轻松实现Excel与CSV格式互转(含批量转换)的文章就介绍到这了,更多相关Java Excel与CSV互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JDBC三层架构深入刨析

    JDBC三层架构深入刨析

    三层架构是一种软件设计架构,是一种组织代码的手段和方法,三层架构的优点是扩展性好,复用性高;缺点是步骤多,比较繁琐;代码多,效率降低
    2022-12-12
  • java中List数组用逗号分隔开转成字符串2种方法

    java中List数组用逗号分隔开转成字符串2种方法

    在我们日常开发中,在前后端交互的时候会遇到多个id或其他字段存放到一个字段中,这时我们会遇到一个List(集合)---->String(单个字段),这篇文章主要给大家介绍了关于java中List数组用逗号分隔开转成字符串的2种方法,需要的朋友可以参考下
    2023-10-10
  • Java编程利用socket多线程访问服务器文件代码示例

    Java编程利用socket多线程访问服务器文件代码示例

    这篇文章主要介绍了Java编程利用socket多线程访问服务器文件代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • mybatis利用association或collection传递多参数子查询

    mybatis利用association或collection传递多参数子查询

    今天小编就为大家分享一篇关于mybatis利用association或collection传递多参数子查询,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Spring中@Value设置默认值问题解决

    Spring中@Value设置默认值问题解决

    本文主要介绍了Spring中@Value设置默认值问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Spring中的refresh方法分析

    Spring中的refresh方法分析

    这篇文章主要介绍了Spring中的refresh方法分析,文章围绕主题展开详细的refresh方法相关资料介绍,需要的小伙伴可以参考一下
    2022-05-05
  • synchronized 和 Lock 的异同点(如何让选择)

    synchronized 和 Lock 的异同点(如何让选择)

    这篇文章主要介绍了 synchronized和Lock的异同点(如何让选择),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java将文件压缩成zip并下载

    Java将文件压缩成zip并下载

    这篇文章主要为大家详细介绍了Java如何将文件压缩成zip和下载,并处理base64和url,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2025-04-04
  • 详解Servlet入门级设置(超详细 IDEA2020版)

    详解Servlet入门级设置(超详细 IDEA2020版)

    这篇文章主要介绍了详解Servlet入门级设置(超详细 IDEA2020版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java创建ZIP压缩文件的方法

    Java创建ZIP压缩文件的方法

    这篇文章主要介绍了Java创建ZIP压缩文件的方法,实例分析了java创建zip文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07

最新评论