使用 ONLYOFFICE 宏为单元格文本添加破折号

2026年08月21日作者:Krystal

作为 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 宏为单元格文本添加短横线

如何使用

  1. 在 ONLYOFFICE 电子表格编辑器中打开一个电子表格文件。
  2. 选择需要设置格式的单元格区域。
  3. 前往视图,创建新宏,并粘贴上方代码。
  4. 点击运行

选中区域中的所有非空单元格都会立即添加短横线,空单元格以及已经处理过的单元格将保持不变。

这个宏展示了如何通过几行代码自动完成重复性的格式处理任务,避免逐个修改单元格。同时,您也可以轻松调整代码,将短横线替换为其他分隔符或应用于不同格式需求。

如果您有希望我们介绍的宏创意,或者对当前宏有改进建议,欢迎前往 ONLYOFFICE 社区论坛中的宏分类分享您的想法。这里是提交新宏示例需求、交流开发思路,以及与 ONLYOFFICE 团队和其他开发者讨论技术方案的理想平台。

创建免费的 ONLYOFFICE 账户

在线查看并协作编辑文本文档、电子表格、幻灯片、表单和 PDF 文件。