在处理 Excel 数据时,微软 Excel 中的 “文本分列(Text to Columns)” 功能是一个非常实用的工具,它可以将单元格中的文本按指定规则拆分到多个列中。当导入的数据格式不够规范时,这一功能尤其有用。而对于 Java 开发者来说,如果能通过编程方式实现这一操作,将大大提升 Excel 数据处理工作的效率。
本文将带你学习如何使在 Java 中将文本拆分为多列,实现自动化处理。
安装处理 Excel 的专业 Java 库
Spire.XLS for Java 是一个实用的第三方组件,可完成在 Java 中读取、写入以及转换 Excel 的 XLS 或 XLSX 文件等工作。要开始使用该库,你需要先添加相应的依赖。目前常见的导入方式有两种: 方法一:通过 Maven 安装 如果你使用 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.5.1</version>
</dependency>
</dependencies>
方法二:手动安装
- 通过官网下载 Spire.XLS for Java 安装包。
- 解压后获取其中的 Spire.Xls.jar 文件,并将该 JAR 文件添加到你的项目中即可使用。
Java 实现 Excel 文本分列并保存到同一工作表
加载 Excel 文件并访问工作表 使用 Workbook.loadFromFile() 方法加载输入的 Excel 文件,然后访问其中的指定工作表。
访问单元格并获取数据 遍历工作表中的每一行,定位到目标单元格,通过 CellRange.getText() 方法获取该单元格中的文本内容。
拆分 Excel 单元格中的文本 使用 Java 的 String.split(String regex) 方法,按照指定的分隔符(如 ",")对文本进行拆分。
将拆分后的文本写入多个列中 遍历拆分出的数据,并将其逐个写入到对应的列中,实现“文本分列”的效果。
保存修改后的 Excel 文件 使用 Workbook.saveToFile() 方法,将更新后的 Excel 文件保存到指定位置。
下方的代码展示了怎样将 Excel 中的文本拆分,并保存到同一个工作表中:
import com.spire.xls.*;
public class splitDataIntoMultipleColumns {
public static void main(String[] args) {
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.loadFromFile("/成绩.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// Iterate through each row in the worksheet 遍历工作表中的每一行
for (int i = 0; i < sheet.getLastRow(); i++)
{
// 获取当前行第一个单元格的文本
String text = sheet.getRange().get(i + 1, 1).getText();
// 将文本按照逗号进行拆分
String[] splitText = text.split(",");
// Iterate through each split data 遍历拆分后的数据
for (int j = 0; j < splitText.length; j++)
{
// 将拆分后的数据写入不同的列
sheet.getRange().get(i + 1, j + 3).setText(splitText[j]);
}
}
// 设置自适应列宽
sheet.getAllocatedRange().autoFitColumns();
// 保存结果文档
workbook.saveToFile("/拆分Excel数据.xlsx", ExcelVersion.Version2016);
}
}
温馨提示:代码中的分隔符必须与源文件中的实际字符一致,尤其要注意区分英文逗号(,)和中文逗号(,)。
Java 实现 Excel 文本分列并保存到新工作表
将拆分后的数据保存到同一个工作表中,更适合轻量级处理和快速查看的场景。而如果你希望更稳妥地处理数据,并避免覆盖原始内容,那么将拆分结果写入一个新的工作表会是更合适的选择。 这一方案的整体逻辑与上一章节中介绍的保存到同一工作表的方式非常相似。你可以参考它,了解拆分流程的具体执行顺序。
在实现上,主要的区别在于:
- 使用 Workbook.getWorksheets().add() 方法在工作簿中新增一个工作表;
- 写入数据时,将 sheet.getRange().get(i + 1, j + 3).setText(splitText[j]) 中的 sheet 替换为新创建的工作表对象。 具体实现可以参考下面这段完整的代码示例:
import com.spire.xls.*;
public class splitDataIntoMultipleColumns {
public static void main(String[] args) {
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载 Excel 文件(输入路径)
workbook.loadFromFile("/成绩.xlsx");
// 获取第一个工作表(原始数据)
Worksheet sourceSheet = workbook.getWorksheets().get(0);
// 新增一个工作表,用于存放拆分结果
Worksheet resultSheet = workbook.getWorksheets().add("拆分结果");
// 遍历原始工作表的每一行
for (int i = 0; i < sourceSheet.getLastRow(); i++) {
// 获取当前行第 1 列的文本(A 列)
String text = sourceSheet.getRange().get(i + 1, 1).getText();
// 按逗号拆分文本
String[] splitText = text.split(",");
// 将拆分后的内容写入新工作表的同一行,不同列
for (int j = 0; j < splitText.length; j++) {
resultSheet.getRange().get(i + 1, j + 1).setText(splitText[j]);
}
}
// 自动调整新工作表的列宽
resultSheet.getAllocatedRange().autoFitColumns();
// 保存到指定文件(输出路径)
workbook.saveToFile("/拆分Excel数据新表.xlsx", ExcelVersion.Version2016);
}
}
处理不同的分隔符
在拆分文本时,除了常见的逗号,还可能遇到空格、分号或制表符等其他分隔符。你只需根据实际需求,调整 split() 方法中的正则表达式即可实现不同分隔符的拆分。
例如:
- 按空格拆分:String.split(" ")
- 按分号拆分:String.split(";")
- 按制表符拆分:String.split("\t")
总结
在 Spire.XLS for Java 的帮助下,使用 Java 实现 Excel 文本分列操作既高效又简便,能够提升工作效率并保证数据一致性。该方法支持多种分隔符,适用于处理用户输入、日志和报表等多种场景。你还可以申请免费30天试用许可,全面体验 Spire.XLS for Java 的强大功能,无任何评估限制。