在日常开发中,我们经常需要在不同的数据存储格式之间进行转换,其中 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
中添加如下依赖:
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 文件的方法,无需手动遍历单元格,同时可以指定列分隔符和字符编码。
示例代码
java
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 时,需要按行读取文本,拆分字段,然后写入对应单元格。
示例代码
arduino
import com.spire.xls.*;
import java.io.*;
public class TxtToExcel {
public static void main(String[] args) {
// 创建 Workbook 对象,用于写入 Excel
Workbook 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 版本为 2013
workbook.saveToFile("output.xlsx", ExcelVersion.Version2013);
// 提示导入完成
System.out.println("TXT 导入 Excel 完成");
} catch (IOException e) {
// 打印异常信息
e.printStackTrace();
}
}
}
代码说明:
- 使用
BufferedReader
按行读取,可以处理较大文件而不会一次性占用过多内存。 - 拆分字段时,分隔符要与生成 TXT 文件时一致,确保数据列正确对应。
- 使用
setText
写入单元格,操作简单直观。
四、性能与使用建议
在处理 Excel 与 TXT 转换时,可以注意以下几点:
- 缓冲读写
使用BufferedReader
或BufferedWriter
进行文件读写,提高效率。 - 统一分隔符
导出和导入使用相同的分隔符,避免列错位。 - 统一编码
确保文件读写编码一致,例如 UTF-8,防止中文或特殊字符乱码。 - 大数据量处理
对于数据量非常大时,可以按批次处理或拆分文件,减少内存压力。
五、小结
本文展示了在 Java 中实现 Excel 与 TXT 文件互转的方法:
- Excel 转 TXT :使用
Worksheet.saveToFile
可快速导出 TXT,无需手动循环单元格。 - TXT 转 Excel:逐行读取 TXT,并按列写入单元格,操作直观。
通过这些方法,可以在日常开发中方便地进行报表导出、日志分析或数据迁移,同时保证数据准确性和编码正确性。