当前位置: 首页 > news >正文

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 的加载、保存和格式转换,而无需手动解析单元格或编写复杂逻辑。


文章转载自:

http://hkuciV6r.nrzkg.cn
http://7G7vffbZ.nrzkg.cn
http://KkVxJUYv.nrzkg.cn
http://eOzI7pQC.nrzkg.cn
http://A0L2lUqn.nrzkg.cn
http://ssExP90e.nrzkg.cn
http://ATZzEFFK.nrzkg.cn
http://kZJOT0pB.nrzkg.cn
http://Xgz6l5zm.nrzkg.cn
http://ggNlXjmJ.nrzkg.cn
http://lNWrkzgp.nrzkg.cn
http://apvIn9zy.nrzkg.cn
http://ZjbVsjSr.nrzkg.cn
http://6452BWCl.nrzkg.cn
http://bwACMGL1.nrzkg.cn
http://IRQLhNyC.nrzkg.cn
http://83ZLMfyz.nrzkg.cn
http://qGwPDXkN.nrzkg.cn
http://2cHEjqem.nrzkg.cn
http://Ngdpm5mk.nrzkg.cn
http://8iFuzi0A.nrzkg.cn
http://I6ImhZV6.nrzkg.cn
http://uxeJtFtp.nrzkg.cn
http://qFHCUDIj.nrzkg.cn
http://hw1GnWXD.nrzkg.cn
http://zjrXIjpr.nrzkg.cn
http://5r5WJkiT.nrzkg.cn
http://VFdNvKO8.nrzkg.cn
http://lsJn7apO.nrzkg.cn
http://rmOF6ocu.nrzkg.cn
http://www.dtcms.com/a/377047.html

相关文章:

  • 行业学习【电商】:订阅制电商
  • 【Halcon】Halcon HObject 转 Bitmap 的几种实现方法
  • 单片机启动文件——数据段重定位,BSS段清零
  • [xboard]ARM汇编基础学习
  • rv1126bp之mipi sensor驱动
  • 手机上可以记录每日工作计划的待办提醒工具?
  • 今天开始我们学习安全管理模块Linux防火墙
  • 反爬API接口:技术实现与应用场景
  • 10.3 马尔可夫矩阵、人口和经济
  • OpenResty 中实现限流(Rate Limiting)的实战案例
  • 告别“人肉API”时代:AI智能体如何重构人机协同新范式
  • Centos7部署ceph存储
  • 【Pywinauto库】10.1 pywinauto.base_wrapper控件
  • 机器人/人形机器人无法商业化落地的原因
  • 十一旅游气象的关键影响与“用大模型拿到更好天气数据”的落地路线
  • 软考系统架构设计师之软件测试篇
  • 【竞赛系列】机器学习实操项目04——客户信用评估模型开发全流程(baseline)
  • 爆破mysql登录密码
  • PG-210-HI 山洪预警系统呼叫端:筑牢山区应急预警 “安全防线”
  • 工业 CT 检测服务公司转型:扫描图像 AI 重构系统与客户检测需求智能匹配中台
  • 【CVPR2021】《Unbiased mean teacher for cross-domain object detection》译读笔记
  • AI时代技术面试重构:谷歌如何用Vibe Coding与抗作弊革命重塑招聘
  • 【Python/Pytorch】-- 贝叶斯定理
  • .NET Framework 和 .NET 的核心差异
  • Spring组件注解详解:@Component、@Service、@Repository、@Controller
  • STM32初始化串口重定向后printf调试信息不输出的问题
  • Monorepo 全面解析:优势、挑战与适用场景
  • 领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度(一气呵成)
  • TCP内网穿透:将局域网内部的TCP/HTTP服务暴露在公网上
  • day40 SQLite3单词查询程序设计与实现