Google表格脚本-查找/替换-查找大小写完全匹配的单词

时间:2018-08-14 21:20:13

标签: google-apps-script google-sheets google-sheets-api

我正在使用一个查找/替换单词onEdit的脚本。但是,它不适用于大写的单词(我的查找查询为小写)。如何获取完全匹配的大写和小写单词?

示例: 找到:“太阳”和“太阳” 替换:“阳光”(仅小写)

我也不希望它替换部分单词 例: 找到:“ sun”和“ Sun”确切的字符串-而不是“ sunny”,“ sung”或“ sundry”

感谢您可以提供的任何帮助!

我的脚本:

function onEdit(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("pss");
  var lr = ss.getLastRow();
  var range = ss.getRange("A2:J" + lr);
  var vlst = range.getValues();

  range.setValues(vlst);
  var i,j,a,find,repl;
   for (var i = 0; i < vlst.length; i++){
    for (var j = 0; j < vlst[i].length; j++){
      a = vlst[i][j];
      if (a == find) vlst[i][j] = repl; 
    find ="sun";
    repl ="sunshine";
    }
  }

1 个答案:

答案 0 :(得分:1)

问题:

  • 语句和语法的不正确排序:
    • setValues()应该在替换所有值之后使用(之前不能)。
    • find / repl变量应该在if语句之前声明和初始化(尽管由于提升/作用域,它可以用于后续循环)。
    • 缺少}
  • 不区分大小写的查找和替换

解决方案:

  • 在执行之前重新排序和初始化变量
  • 使用对象¹存储键/值对。
  • 在查找变量上使用toLowerCase() ²
  • 或者,使用事件对象³,而不是遍历所有内容。

修改后的脚本:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("pss");
  var lr = ss.getLastRow();
  var range = ss.getRange("A2:J" + lr);
  var vlst = range.getValues();
  var findReplace = { //FindReplace object storing key/value pairs in lowercase
    'sun': 'sunshine',
    'moon': 'moonlight',
    'evil': 'evil MasterMind'
  };
  var i, j, a;
  for (i = 0; i < vlst.length; i++) {
    for (j = 0; j < vlst[i].length; j++) {
      a = vlst[i][j].toString().toLowerCase();
      if (findReplace[a]) vlst[i][j] = findReplace[a];
    }
  }

  range.setValues(vlst); //Moved below
}//Added

脚本#2

function onEdit(e) {
  var findReplace = {
    'sun': 'sunshine',
    'moon': 'moonlight',
    'evil': 'evil MasterMind'
  },
    a = findReplace[e.value.toString().toLowerCase()];
  if (a) e.range.setValue(a);
}