查找替换
使用查找替换API,可以在工作表sheet或Range中进行内容的查找、替换等操作。
本文涉及的查找API有:
- Sheet.findAll()
- Range.find()
- Range.findNext()
- Range.findPrevious()
本文涉及到的替换API有:
- Sheet.replaceAll()
- Range.replaceAll()
查找
基于关键字查找单元格
对于查找和替换,最常见的需求是在整表中基于关键字找到对应的单元格。
要实现此功能实现十分简单,只需要调用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()实现。
逐个查找
Range.findNext():实现下一个的逐个查找。
Range.findNext()会返回Range同一行的右侧及Range下方所有行中第一个匹配的单元格,因此只需要不断调用Range.findNext()即可遍历整表中的所有匹配单元格。
const range = Workbook.getActiveCell();
const next = range.findNext('章三');
if (next) {
// 激活当前range
next.activate();
}
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()进行单个单元格的替换。