替换值范围内的文本并将其 return 替换为另一个范围

Replace text in range of values and return it to another range

请帮助我实现替换值范围内的文本并将其return替换为另一个范围。

我现在尝试使用这个脚本,但它只从 A1 获取值:

 function replaceBat() {
      var ss = SpreadsheetApp.getActiveSheet();
      var AAA = ss.getRange("A1:A1000").getValue();
      var AAAString = AAA.toString()
        .replace("1","2")
        .replace("5","6")
//and more than 50 terms;
      var prov = ss.getRange("B1:B1000");
      prov.setValue(AAAString);
      }

在 A1:A1000 范围内 - 要更改的值,

B1:B1000 - 范围 return 更改值。

例如: 我们有:

A1 12541

我们需要:

B1 22642

所有单元格也是如此

试试这个脚本。当然,您必须根据需要更改数组 'toBeChanged' 和 'changeWith'。确保需要替换的字符和要替换的字符在各自的数组中相同 'position'。

function replaceBat() {
var ss = SpreadsheetApp.getActiveSheet(),
    arr = [];
ss.getRange("A1:A1000")
    .getValues()
    .forEach(function (value) {
        var changeWith = ["2", "6", "notest", "/"],
            toBeChanged = ["1", "5", "test", "@"] //add characters to be changed here, the characters you want to change these with in the same 'place' in the above array.
            .map(function (c, i) {
                return value = replaceAll(value.toString(), c, changeWith[i])
            })
            arr.push([value])
    });
ss.getRange("B1:B1000")
    .setValues(arr)
}

function replaceAll(v, c, r) {
return v.indexOf(c) > -1 ? v.replace(new RegExp(c, "g"), r) : v;
}

编辑:如果您希望在一个数组中检查和替换值(按照评论中的要求),将第一个脚本更改为:

function replaceBat2() {
var ss = SpreadsheetApp.getActiveSheet(),
    arr = [];
ss.getRange("A1:A1000")
    .getValues()
    .forEach(function (value) {
        [["1", "2"], ["5", "6"], ["test", "notest"], ["a", "/"]]
            .map(function (c, i) {
                return value = replaceAll(value.toString(), c[0], c[1])
            })
        arr.push([value])
    });
ss.getRange("B1:B1000")
    .setValues(arr)
}

第二个函数 (replaceAll) 的替代方案(可能更快?)是:

function replaceAll(v, c, r) {
return v.indexOf(c) > -1 ? v.split(c)
    .join(r) : v;
}