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

Java 实现 Excel 与 TXT 文本高效互转

在日常开发中,我们经常需要在不同的数据存储格式之间进行转换,其中 Excel 和 TXT 是最常见的两种格式。Excel 以表格形式存储数据,支持丰富的格式、公式和多种数据类型,适合报表生成、统计分析等场景。TXT 是纯文本格式,简单轻量,便于跨平台传输、日志存储或数据交换。

在实际项目中,经常需要将 Excel 文件导出为 TXT,或者将 TXT 导入 Excel 进行进一步处理。例如,日志分析系统可能需要将 Excel 报表转换为 TXT 供脚本处理;数据采集系统可能需要将 TXT 文件整理成 Excel 便于可视化和汇总。

本文将分享如何在 Java 中高效实现 Excel 与 TXT 的互转,并提供完整的示例代码和操作说明。


一、准备工作

在开始编写代码之前,需要完成以下准备:

准备示例文件

  • Excel 文件(.xlsx.xls)用于导出 TXT 测试。
  • TXT 文件,每行用固定分隔符(如空格或制表符)分隔,用于导入 Excel 测试。

理解数据结构

Excel 数据按行列组织,每个单元格对应一个字段;TXT 文件每行是一个记录,通过分隔符拆分字段。在互转时,需要保证字段顺序和数量匹配。

库依赖安装

本文使用的库是 Spire.XLS for Java,它可以直接读取、写入和转换 Excel .xls 和 .xlsx等文件,无需依赖 Microsoft Excel,本地或服务器环境都可以使用。

如果使用 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>
<dependency><groupId>e-iceblue</groupId><artifactId>spire.xls</artifactId><version>13.9.1</version>
</dependency>

二、Excel 转 TXT

Spire.XLS 提供了直接将工作表保存为 TXT 文件的方法,无需手动遍历单元格,同时可以指定列分隔符和字符编码。

示例代码

import com.spire.xls.*;
import java.nio.charset.Charset;public class ExcelToTxt {public static void main(String[] args) {// 创建 Workbook 对象,用于操作 Excel 文件Workbook workbook = new Workbook();// 加载 Excel 文件workbook.loadFromFile("sample.xlsx");// 获取第一个工作表Worksheet worksheet = workbook.getWorksheets().get(0);// 设置字符编码为 UTF-8,确保中文和特殊字符正确显示Charset charset = Charset.forName("UTF-8");// 将工作表保存为 TXT 文件// 第二个参数 " " 表示列之间使用空格分隔,也可以改为 "\t" 或 "," 等worksheet.saveToFile("ExcelToTxt.txt", " ", charset);// 提示导出完成System.out.println("Excel 导出 TXT 完成");}
}

代码说明:

  • Worksheet.saveToFile 可直接将工作表导出为文本文件,不需要循环读取单元格。
  • 第二个参数可以设置列间分隔符,比如空格 " " 或制表符 "\t"。
  • 指定 UTF-8 编码可确保中文或特殊字符不会出现乱码。
  • 这种方式适合数据量较大时快速导出。

三、TXT 转 Excel

将 TXT 导入 Excel 时,需要按行读取文本,拆分字段,然后写入对应单元格。

示例代码

import com.spire.xls.*;
import java.io.*;public class TxtToExcel {public static void main(String[] args) {// 创建 Workbook 对象,用于写入 ExcelWorkbook workbook = new Workbook();// 获取第一个工作表Worksheet sheet = workbook.getWorksheets().get(0);// 使用 BufferedReader 按行读取 TXT 文件try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {String line;int rowIndex = 0; // 当前写入的行号// 逐行读取 TXT 文件while ((line = reader.readLine()) != null) {// 按空格拆分每行的字段String[] values = line.split(" ");// 将拆分后的字段写入 Excel 单元格for (int colIndex = 0; colIndex < values.length; colIndex++) {sheet.getCellRange(rowIndex, colIndex).setText(values[colIndex]);}// 行号递增,写入下一行rowIndex++;}// 保存 Excel 文件,指定 Excel 版本为 2013workbook.saveToFile("output.xlsx", ExcelVersion.Version2013);// 提示导入完成System.out.println("TXT 导入 Excel 完成");} catch (IOException e) {// 打印异常信息e.printStackTrace();}}
}

代码说明:

  • 使用 BufferedReader 按行读取,可以处理较大文件而不会一次性占用过多内存。
  • 拆分字段时,分隔符要与生成 TXT 文件时一致,确保数据列正确对应。
  • 使用 setText 写入单元格,操作简单直观。

四、性能与使用建议

在处理 Excel 与 TXT 转换时,可以注意以下几点:

  • 缓冲读写
    使用 BufferedReaderBufferedWriter 进行文件读写,提高效率。
  • 统一分隔符
    导出和导入使用相同的分隔符,避免列错位。
  • 统一编码
    确保文件读写编码一致,例如 UTF-8,防止中文或特殊字符乱码。
  • 大数据量处理
    对于数据量非常大时,可以按批次处理或拆分文件,减少内存压力。

五、小结

本文展示了在 Java 中实现 Excel 与 TXT 文件互转的方法:

  • Excel 转 TXT:使用 Worksheet.saveToFile 可快速导出 TXT,无需手动循环单元格。
  • TXT 转 Excel:逐行读取 TXT,并按列写入单元格,操作直观。

通过这些方法,可以在日常开发中方便地进行报表导出、日志分析或数据迁移,同时保证数据准确性和编码正确性。


文章转载自:

http://kaXLHSEb.drpbc.cn
http://eNuIpQqc.drpbc.cn
http://HSbFBREu.drpbc.cn
http://QDapsyZT.drpbc.cn
http://slugM11N.drpbc.cn
http://iwkEsZuT.drpbc.cn
http://zLA9h5uY.drpbc.cn
http://EujwmPNS.drpbc.cn
http://zwq961hm.drpbc.cn
http://8iBrXY6j.drpbc.cn
http://cT3rMJ0M.drpbc.cn
http://loF7uDza.drpbc.cn
http://TcCkIIwy.drpbc.cn
http://SUfnk4pY.drpbc.cn
http://lWH4pzqc.drpbc.cn
http://3v6Y5rwY.drpbc.cn
http://WsyRXSjc.drpbc.cn
http://qhMWoE03.drpbc.cn
http://kHh0ke6l.drpbc.cn
http://xC9teTdS.drpbc.cn
http://1kthNAdL.drpbc.cn
http://9GOqAbrR.drpbc.cn
http://tGAVtLxx.drpbc.cn
http://7kpFTEna.drpbc.cn
http://LgbN7mXy.drpbc.cn
http://RGsMlUUp.drpbc.cn
http://Yxsl1u5V.drpbc.cn
http://Thr5FLs0.drpbc.cn
http://pWygEheg.drpbc.cn
http://eW8uH1pN.drpbc.cn
http://www.dtcms.com/a/388200.html

相关文章:

  • 【vue+exceljs+file-saver】纯前端:下载excel和上传解析excel
  • 国产化Excel开发组件Spire.XLS教程:使用 Python 设置 Excel 格式,从基础到专业应用
  • Parasoft以高标准测试助力AEW提升汽车软件质量
  • el-date-picker时间选择器限制时间跨度为3天
  • 35.Socket网络编程(UDP)(下)
  • 【前沿技术Trip Three】正则表达式
  • 多平台数据交换解耦方案选型
  • ​​[硬件电路-239]:从电阻器的高频等效模型,看高频信号的敏感性,电路的性能受到频率的影响较大
  • Java 中的 23 种设计模式详解
  • 《2025年AI产业发展十大趋势报告》六十二
  • 【字节跳动】LLM大模型算法面试题:大模型 LLM的架构介绍?
  • 【C++】类成员访问控制
  • 彩笔运维勇闯机器学习--梯度下降法
  • 正点原子zynq_FPGA学习笔记-vivado安装
  • 基于yolov8/yolo11的视觉识别算法使用和详解
  • 2025年数据科学与大数据技术和统计学有什么区别?
  • STM32H743-ARM例程2-GPIO点亮LED
  • 每天五分钟深度学习:深层神经网络的前向传播算法和反向传播算法
  • 【LeetCode】41. 缺失的第一个正数
  • Linux系统指令之 —— ip route route
  • 嵌入式硬件笔记:三种滤波电路的对比
  • webrtc弱网-InterArrivalDelta类源码分析与算法原理
  • 第6章:计算机内存实战
  • 模型压缩与量化实战:将BERT模型缩小4倍并加速推理
  • RS485 与 CAN 通讯:选哪个更合适?
  • 腾讯微保社招笔试
  • centos系统安装mysql8
  • Go语言垃圾回收器深入解析
  • 大模型的领域知识注入的四种路径
  • 寻找高速传输新选择:当传统方案不再满足现代企业需求