Google Sheets App Script用createTextFinder实现多文本替换
问题修正方案
你原代码的核心问题有2个:
createTextFinder是Google Sheet/Range对象的实例方法,不能直接全局调用appendRow方法返回的是Sheet对象,不能直接链式调用你提前定义的t1、t2变量
方案1:写入前直接替换变量值(性能最优,仅影响当前写入数据)
如果只是需要处理当前要追加的id、name两个字段的布尔值转义,直接在写入前做字符串替换即可,不需要调用TextFinder:
function addUser() { var FILE = SpreadsheetApp.openById("XXXXXXXXXXXXX"); var sheet = FILE.getSheetByName("Sheet1"); var id = "True"; var name = "FALSE"; // 写入前直接替换目标字符串 id = id.toUpperCase() == "TRUE" ? "YES" : id; name = name.toUpperCase() == "FALSE" ? "NO" : name; sheet.appendRow([id,name]); }
方案2:追加行后针对新行做TextFinder替换(适合需要批量替换新行多字段的场景)
如果要写入的字段较多,逐个替换麻烦,可以先追加行,再定位到刚写入的最后一行,调用TextFinder做批量替换,不会影响历史数据:
function addUser() { var FILE = SpreadsheetApp.openById("XXXXXXXXXXXXX"); var sheet = FILE.getSheetByName("Sheet1"); var id = "True"; var name = "FALSE"; // 先追加行 sheet.appendRow([id,name]); // 定位到刚写入的最后一行 var lastRow = sheet.getLastRow(); var targetRange = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()); // 批量替换,matchCase(false)可匹配大小写混合的True/TRUE/true等场景 targetRange.createTextFinder("TRUE").matchCase(false).replaceAllWith("YES"); targetRange.createTextFinder("FALSE").matchCase(false).replaceAllWith("NO"); }
如果需要全表替换所有匹配内容,把targetRange替换为sheet对象即可。
内容的提问来源于stack exchange,提问作者P.J
相关产品推荐
相关产品推荐

