繁体   English   中英

Google App 脚本:查找和替换特定列

[英]Google App Script: Find & Replace for specific columns

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

  • 在工作表中搜索to_replace字符串。
    • 如果找到,将to_replace替换为replace_with
    • 如果没有找到,将to_replace替换为to_replace // 这个不需要,而且会出问题(它替换了所有的公式,并用字符串替换)。

我的目标:

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

我的菜鸟解决方案:

通过使用此处的脚本从数组中删除列 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); }

参考:

如果我想替换,“to_replace”的正确输入是什么

\

我试过了

var to_replace = "\\";

但没有工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM