javascript - 谷歌应用程序脚本 : Find & Replace for specific columns

标签 javascript arrays google-apps-script google-sheets

这是我正在使用的查找和替换脚本的问题和逻辑。

  • 在工作表中搜索 to_replace 字符串。
    • 如果找到,将 to_replace 替换为 replace_with
    • 如果找不到,将 to_replace 替换为 to_replace//这不是必需的,会导致问题(它会替换所有公式,并用字符串替换)。

我的目标:

我希望脚本只替换匹配 to_replace 的单元格,而忽略所有其他单元格。

我的菜鸟解决方案:

通过使用来自 here 的脚本从数组中删除 C 列来排除论坛中的特定列. (仅在 B 和 D 列中查找和替换)。

这是我在当前脚本中添加的修改后的代码...

const range = sheet.getRange('B2:D'+lastRow).getValues();
range.forEach(a => a.splice(1, 1)); //removes column C.

但我收到错误:“TypeError: var data = range.getValues(); is not a function”

问题

你能帮我解决我的菜鸟解决方案,或者教我更好的方法来解决这个问题吗?


我当前的脚本

function findAndReplace(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var lastRow = sheet.getLastRow()
  var lastColumn = sheet.getLastColumn()
  // var range = sheet.getRange(1, 1, lastRow, lastColumn) //REMOVED - Searches all columns.

  const range = sheet.getRange('B2:D'+lastRow).getValues(); //ADDED - Searches only B & D
  range.forEach(a => a.splice(1, 1)); //ADDED - Searches only B & D
     
  var to_replace = "TextToFind";
  var replace_with = ""; //Leave blank to delete Text, or enter text in quotes to add string.
  var data  = range.getValues();
 
    var oldValue="";
    var newValue="";
    var cellsChanged = 0;
 
    for (var r=0; r<data.length; r++) {
      for (var i=0; i<data[r].length; i++) {
        oldValue = data[r][i];
        newValue = data[r][i].toString().replace(to_replace, replace_with);
        if (oldValue!=newValue)
        {
          cellsChanged++;
          data[r][i] = newValue;
        }
      }
    }
    range.setValues(data);
}

最佳答案

来自 teach me a better way to solve this problem,在你的情况下,我认为当使用 TextFinder 时,处理成本可能会降低。当使用 TextFinder 来实现你的目标时,它变成如下。

示例脚本:

function myFunction() {
  var to_replace = "TextToFind";
  var replace_with = ""; //Leave blank to delete Text, or enter text in quotes to add string.

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var lastRow = sheet.getLastRow();
  var ranges = ['B2:B' + lastRow, 'D2:D' + lastRow];
  sheet.getRangeList(ranges).getRanges().forEach(r => 
    r.createTextFinder(to_replace).matchEntireCell(true).replaceAllWith(replace_with)
  );
}

备注:

  • 如果要替换部分单元格值,请将r.createTextFinder(to_replace).matchEntireCell(true).replaceAllWith(replace_with)修改为r.createTextFinder( to_replace).replaceAllWith(replace_with).

  • 作为附加修改,如果你的脚本被修改了,下面的修改怎么样?

      function findAndReplace() {
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
        var lastRow = sheet.getLastRow()
        var range = sheet.getRange('B2:D' + lastRow);
        var data = range.getValues();
        var to_replace = "TextToFind";
        var replace_with = ""; //Leave blank to delete Text, or enter text in quotes to add string.
        for (var r = 0; r < data.length; r++) {
          for (var i = 0; i < data[r].length; i++) {
            var value = data[r][i].toString();
            if (i != 1 && value.includes(to_replace)) {
              data[r][i] = data[r][i].replace(to_replace, replace_with);
            }
          }
        }
        range.setValues(data);
      }
    

引用资料:

关于javascript - 谷歌应用程序脚本 : Find & Replace for specific columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70693384/

相关文章:

javascript - 无法实现自动注销 react 本地存储

javascript - 无法获得适合 SVG Box 的 SVG 路径

javascript - 测试位置jquery

c++ - 溢出或内存错误 c++

C++、内存和数组。创建我自己的 hashmap 进行练习。内存中遗留了意外数据?

javascript - 在 For 循环中创建数组而不运行数组

amazon-web-services - 谷歌应用程序脚本 : Connecting to Amazon Selling Partner API (Access Token)

javascript - JQuery Fancybox 表单

google-apps-script - 尝试自动打开由脚本创建的文档

google-apps-script - 谷歌表单中的 e.values 会跳过空答案,有解决方法吗?