【问题标题】:Script to Find & Replace cells that CONTAIN a certain value查找和替换包含特定值的单元格的脚本
【发布时间】:2021-01-26 14:20:01
【问题描述】:

由于宏实际上并未记录“查找和替换”操作,我正在尝试获取一个脚本来查找和替换可以在多个单元格中找到的某些字符串。例如;我有一个包含“Fred and Joe”的单元格,我需要去掉“and”。在另一个单元格中,我可能有“Fred, Joe”,我需要去掉“,”。

我已经尝试了以下方法,但它仅在单元格仅包含“AND”时才有效。当单元格包含“var f”时,我需要脚本来替换值:

}
function FandR(){
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName("Sheet1");
  var f = "and";
  var r = ",";
  var data = ss.getDataRange().getValues();
  Logger.log(data.length);
  for (var i = 0; i < data[0].length;i++){
    for (var j = 0; j < data.length;j++){
      if(data[j][i]==f)
      ss.getRange(j+1,i+1).setValue(r);
    }
  }  
}

【问题讨论】:

  • 当单元格包含“var f”时,是什么意思?你指的是实际的字符串'var f'吗?在这种情况下,您只需将 if(data[j][i]==f) 替换为 if(data[j][i]==f || data[j][i]=='var f')
  • 感谢您的快速回复 :-) 我的意思是即使单元格包含其他字符,“and”也应替换为“”。通过替换那行代码,我没有得到预期的结果。该脚本仅替换仅包含“and”的单元格,但不替换包含“and”和其他字符的单元格...
  • 嗨@Marc,在这种情况下,您应该使用indexOf() 来检查单元格包含字符串而不是==(检查单元格值是否等于字符串);我发布了代码作为答案。
  • @secan 请不要标记明显不包含 VBA 代码的问题vba。这是 google-apps-script 代码(一种 JavaScript)。此外,正如标签描述所说,标签macros 不得用于 VBA 等脚本语言。我将标签固定为更合适的标签。

标签: google-apps-script google-sheets replace find regexp-replace


【解决方案1】:

在您进一步澄清后,我认为您需要的是:

function FindReplaceMacro() {
  /*
   * Create a regular expression to match
   *   - the string 'and' surrounded by spaces (' and ', ' AND ')
   *   - any non-alphabetic character surrounded by spaces (e.g. ' - ', ' / ', etc.)
   *   - a comma followed by a space (', ')
   */
  var re = / and | \W |, /gi;
  
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  
  for (var r = 0; r < values.length; r++) {
    for (var c = 0; c < values[r].length; c++) {
      sheet.getRange(r+1, c+1).setValue(values[r][c].replace(re, ' '));
    }
  }
}

您可以测试一下here(宏执行后可能需要刷新页面,才能看到修改后的数据)

【讨论】:

  • 这正是我所需要的!!!!!!非常感谢:-)
  • @Marc,请注意我修改了代码,以便 not 替换单词中的“and”(例如“cANDidate”);我认为这是你想要的行为;)
  • 嗨@secan。当我粘贴包含 RegEx 的代码时,我收到错误:ReferenceError: RegEx is not defined。当我使用前面的代码时,“and”被替换为“,”但我仍然收到错误:TypeError: data[j][i].indexOf is not a function。我还想知道如何为“,”(和,&,+,-,加号)添加更多值来替换...
  • 嗯...我从来没有使用过宏,但是从快速研究来看,显然你必须使用 VBA,这与 JavaScript 有点不同; this article 应该涵盖与您的案例相关的差异,涉及正则表达式,而 here 您可以看到如何使用 InStr() 函数,它是 VBA 等效于 indexOf()
  • 顺便说一句,我的代码中有一个错字(现已修改):它是RegExp 而不是RegEx
猜你喜欢
  • 1970-01-01
  • 2016-08-24
  • 2020-12-24
  • 1970-01-01
  • 2020-11-05
  • 2023-01-31
  • 2016-10-27
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多