使用 ONLYOFFICE 宏为单元格文本添加破折号
作为 ONLYOFFICE 宏系列文章的一部分,我们将继续分享实用的宏示例,帮助您提升办公效率。
手动逐个设置单元格格式可能会非常繁琐,尤其是在需要处理几十甚至数百个单元格时。本文将介绍一个简单的 ONLYOFFICE 电子表格编辑器宏,它可以自动为选定单元格中的每个字符添加短横线。

为什么使用这个宏
使用分隔符包裹字符,可以用于生成装饰性标签、创建具有视觉区分效果的占位值,或者为需要特定分隔格式字符串的系统准备导入数据。
如果手动处理大量单元格,不仅效率较低,也容易出现错误。而使用宏可以立即完成这一重复操作。
此外,该宏足够智能:它会自动跳过空单元格以及已经添加过短横线的单元格,因此您可以安全地重复运行宏,而无需担心短横线被重复添加。
创建宏
下面我们将详细介绍脚本中的各个部分,以及它们所发挥的作用。
获取当前选中的单元格
宏首先获取用户当前在工作表中选中的单元格区域:
let selection = Api.GetSelection();
selection.ForEach(function (cell) {
// ... processing happens here for each cell
});
`Api.GetSelection()` 用于返回当前工作表中选中的单元格范围,而 `ForEach()` 会遍历该范围内的每个单元格,并针对每个单元格执行一次回调函数。
跳过空单元格
在执行任何处理之前,宏会先检查单元格是否包含内容:
let cellValue = cell.GetValue();
if (cellValue === null || cellValue === undefined || cellValue === "") {
return;
}
`GetValue()` 会读取当前单元格中的内容。如果单元格为空(包括 null、undefined 或空字符串),函数会直接返回,并继续处理下一个单元格,不会修改空白单元格。
跳过已经添加短横线的单元格
为了确保宏可以安全运行多次,它还会检查单元格是否已经处理过:
cellValue = String(cellValue);
if (/^---(?:.---)+$/.test(cellValue)) {
return;
}
首先,通过 `String()` 方法将内容转换为字符串,以确保后续可以安全地进行检测和逐字符处理。
正则表达式 /^—(?:.—)+$/ 用于匹配已经符合目标格式的字符串。如果匹配成功,宏会跳过该单元格,避免再次添加短横线。
为每个字符添加短横线
这是宏的核心部分,它会逐字符创建新的字符串:
let sTemp = "---";
for (let c = 0; c < cellValue.length; c++) {
sTemp += cellValue.charAt(c) + "---";
}
循环每执行一次,就会添加原始内容中的下一个字符,并在字符后加入 “—”,最终生成字符之间带有短横线的新字符串。
将结果写回单元格
最后,生成的新字符串会被保存回单元格:
cell.SetValue(sTemp);
完整宏代码
(function () {
// Get the currently selected cell(s) in the spreadsheet
let selection = Api.GetSelection();
// Loop through each selected cell
selection.ForEach(function (cell) {
// Get the current value of the cell
let cellValue = cell.GetValue();
// Skip empty, null, or undefined cells — nothing to process
if (cellValue === null || cellValue === undefined || cellValue === "") {
return;
}
// Ensure the value is treated as a string (in case it's a number, etc.)
cellValue = String(cellValue);
// Skip cells that already match the pattern
if (/^---(?:.---)+$/.test(cellValue)) {
return;
}
// Start building the new value with a leading "---"
let sTemp = "---";
// Wrap each character of the original value with "---" separators
for (let c = 0; c < cellValue.length; c++) {
sTemp += cellValue.charAt(c) + "---";
}
// Write the transformed value back into the cell
cell.SetValue(sTemp);
});
})();
现在,让我们运行宏,看看它的实际效果!

如何使用
- 在 ONLYOFFICE 电子表格编辑器中打开一个电子表格文件。
- 选择需要设置格式的单元格区域。
- 前往视图 → 宏,创建新宏,并粘贴上方代码。
- 点击运行。
选中区域中的所有非空单元格都会立即添加短横线,空单元格以及已经处理过的单元格将保持不变。
这个宏展示了如何通过几行代码自动完成重复性的格式处理任务,避免逐个修改单元格。同时,您也可以轻松调整代码,将短横线替换为其他分隔符或应用于不同格式需求。
如果您有希望我们介绍的宏创意,或者对当前宏有改进建议,欢迎前往 ONLYOFFICE 社区论坛中的宏分类分享您的想法。这里是提交新宏示例需求、交流开发思路,以及与 ONLYOFFICE 团队和其他开发者讨论技术方案的理想平台。
创建免费的 ONLYOFFICE 账户
在线查看并协作编辑文本文档、电子表格、幻灯片、表单和 PDF 文件。


