WPS 利用 宏 脚本拆分 Excel 多行文本到多行
文章目录
- WPS 利用 宏 脚本拆分 Excel 多行文本到多行
- 效果
- 需求背景
- 🛠 操作步骤
- 代码实现
- 代码详解
- 使用场景
- 注意事项
- 总结
WPS 利用 宏 脚本拆分 Excel 多行文本到多行
在 Excel 工作表中,我们经常遇到一列中包含多行文本(用换行符分隔)的情况,比如备注、详细描述等信息。直接操作这些多行数据,尤其是批量处理时非常不方便。今天,我将分享一个利用 JavaScript 脚本(基于 Excel VBA 的 JS 脚本接口或者 Excel Online 脚本)自动拆分含多行文本的单元格,并将拆分后的数据逐行写入新工作表的实用方法。
效果
注:要把xlsx文件,另存为后缀为xlsm格式的才能创建宏
动图展示
需求背景
- 原表结构:有一张工作表
sheet1
,前四列分别是 A、B、C、D。 - 目标:对于第 3 列(C列)中含有多行文本的单元格,将多行内容拆分成多行,每一行数据分别对应原来行的 A、B、D 列内容,拆分后写入新工作表
Sheet2
。 - 结果:
Sheet2
每一行代表拆分后的一条记录,方便后续统计、筛选和处理。
🛠 操作步骤
- 将
xlsx
文件另存为后缀为.xlsm
格式(启用宏的 Excel 文件) - 打开刚刚保存的
.xlsm
文件 - 点击菜单栏:工具 → 开发工具 → WPS 宏编辑器
- 复制下面的代码粘贴进去
- 点击“运行”按钮
- 弹出提示框 “拆分完成”,结果将写入
Sheet2
,操作完成 ✅
代码实现
function splitMultilineTextToRows() {let sheet = Application.ActiveWorkbook.Sheets.Item("sheet1");let outputSheet = Application.ActiveWorkbook.Sheets.Item("Sheet2");outputSheet.Cells.ClearContents(); // 清空输出表格let outputRow = 1;for (let i = 1; i <= 100; i++) {let aCell = sheet.Cells.Item(i, 1); // A列let bCell = sheet.Cells.Item(i, 2); // B列let cCell = sheet.Cells.Item(i, 3); // C列let dCell = sheet.Cells.Item(i, 4); // D列let aText = aCell.Text;let bText = bCell.Text;let cText = cCell.Text;let dText = dCell.Text;if (cText.trim() !== "") {// 按换行符分割,支持 Windows 和 Unix 换行格式let lines = cText.split(/\r?\n/);for (let j = 0; j < lines.length; j++) {let line = lines[j].trim();if (line !== "") {outputSheet.Cells.Item(outputRow, 1).Formula = "'" + aText; // 强制文本格式outputSheet.Cells.Item(outputRow, 2).Formula = "'" + bText; // 强制文本格式outputSheet.Cells.Item(outputRow, 3).Formula = line;outputSheet.Cells.Item(outputRow, 4).Formula = "'" + dText; // 强制文本格式outputRow++;}}}}alert("拆分完成,结果已写入 Sheet2");
}
代码详解
-
初始化工作表对象
通过Application.ActiveWorkbook.Sheets.Item()
获取原始数据表和输出表。 -
清空目标工作表
调用outputSheet.Cells.ClearContents()
先清空已有数据,避免叠加污染。 -
遍历数据行
本例中固定遍历 1 到 100行(实际使用可根据需求动态调整)。 -
读取对应单元格内容
利用.Text
属性获取单元格显示文本。 -
判断并拆分多行文本
对第3列(C列)文本按换行符拆分,兼容 Windows(\r\n
)和 Unix(\n
)格式。 -
逐行写入目标表
拆分后的每行数据写入Sheet2
,对应 A、B、D 列的值保持不变。使用'
前缀强制 Excel 按文本处理单元格,避免自动格式转换。 -
完成提示
脚本运行结束弹出提示框,告知用户处理完成。
使用场景
- Excel 中导入数据时,备注列内包含多行条目,需拆分为独立记录
- 将不规范的多行文本数据规范化成单行,方便批量操作与分析
- 结合自动化脚本,实现数据清洗和预处理,提升办公效率
注意事项
-
如果数据行数不固定,可改成动态获取,比如:
let lastRow = sheet.UsedRange.Rows.Count;
-
脚本基于 Excel 支持的 JS API,适用于 Office 365 的 Excel Online 脚本环境或者支持 JavaScript 的 VBA 环境。
-
如果用纯 VBA 实现,语法会有差异,需做相应调整。
总结
本文分享的 splitMultilineTextToRows
函数,有效解决了 Excel 多行文本拆分难题,方便日常办公中数据清洗和规范化。通过简单的脚本自动化,大幅度提升了处理效率,避免手工操作繁琐与出错。