查找替换

使用查找替换API,可以在工作表sheet或Range中进行内容的查找、替换等操作。

本文涉及的查找API有:

本文涉及到的替换API有:

查找

基于关键字查找单元格

对于查找和替换,最常见的需求是在整表中基于关键字找到对应的单元格。

要实现此功能实现十分简单,只需要调用sheet.findAll()即可。

例如,以下示例代码实现了找到所有错写为“章三”的单元格,并通过修改其背景色将其高亮出来。

// 获取当前激活的sheet
const sheet = Workbook.getActiveSheet();
// 获取当前sheet内所有包含“章三”字符串的range列表
const ranges = sheet.findAll('章三');
ranges.forEach((range) => {
 range.setBackgroundColor('yellow');
});

其中的核心代码是const ranges = sheet.findAll('章三')。该方法会在整个Sheet上查找关键字章三,并且把对应的range以数组的形式返回。

除了全表查找之外,还可以使用Range.find()在某个区域中进行查找。

说明

Range.find()只会返回第一个找到的Range,如果需要在Range中查找所有的单元格,可以参考本文档逐个查找中的说明,配合使用Range.findNext()实现。

逐个查找

  1. Range.findNext():实现下一个的逐个查找。

Range.findNext()会返回Range同一行的右侧及Range下方所有行中第一个匹配的单元格,因此只需要不断调用Range.findNext()即可遍历整表中的所有匹配单元格。

const range = Workbook.getActiveCell();
const next = range.findNext('章三');
if (next) {
  // 激活当前range
 next.activate();
}
  1. Range.findPrevious():实现上一个的逐个查找

Range.findPrevious()的使用方法与Range.findNext()一致,不断调用Range.findPrevious()实现上一个的逐个查找。

高级查找选项

上面我们介绍了如何进行简单的文本匹配。如果有更复杂的需求,例如要匹配整个单元格、大小写、公式,甚至使用正则表达式,可以使用查找API的第二个参数进行配置。具体请参考find(text, findOptions)API的文档。

替换

替换API可以独立使用,也可以配合查找API一起使用。

替换所有的匹配项

要将所有的章三都替换为张三,只需要如下所示调用Sheet.replaceAll()即可。

const sheet = Workbook.getActiveSheet();
sheet.replaceAll('章三', '张三');

对替换的精细控制

如果并不希望替换所有的文本,首先可以尝试使用Sheet.replaceAll()中的replaceOptions参数指定更加精细化的查找选项。

如果replaceOptions仍然无法满足需求,那么可以结合Range.findNext() 来逐个查找,跳过不需要判断的单元格,使用Range.replaceAll()进行单个单元格的替换。