如何通过脚本从Google表格的单元格中删除子字符串

时间:2020-10-21 14:47:12

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

我正在尝试自动化我的其中一列中的数据解析过程。到目前为止,我已经有了它,以便在应用公式之后我可以获得所需的数据,但周围带有文本。 我想查找并替换单元格值,这样我只能得到用引号引起来的数据而不使用引号。我将如何通过脚本执行此操作?请参考下图。这是我到目前为止所拥有的:

var src = ":utm_source=>";
  var med = ":utm_medium=>";
  var camp = ":utm_campaign=>";
  var term = ":utm_term=>";
  var con = ":utm_content=>";
  var r1 = "";
  var data = sheet.getDataRange().getValues();
  Logger.log(data.length);
  for (var i = 0; i < data[0].length;i++){
    for (var j = 0; j < data.length;j++){
      Logger.log(data[j][i]);
      if(data[j][i].indexOf(src) > -1 || data[j][i].indexOf(med) > -1 || data[j][i].indexOf(camp) > -1 || data[j][i].indexOf(term) > -1 || data[j][i].indexOf(con) > -1){
      sheet.getRange(j+1,i+1).setValue(r1);
        sheet
      }
    }
  }

picture of data and desired result

1 个答案:

答案 0 :(得分:0)

  • 使用split('"')[1](请参阅split())检索引号之间的子字符串。
  • 作为best practice,修改检索到的2D数组(data)并使用setValues(data),而不是用setValue设置每个人。通过结合使用map()some()来完成此操作的一种方法,如下所示(请检查内联注释):
var src = ":utm_source=>";
var med = ":utm_medium=>";
var camp = ":utm_campaign=>";
var term = ":utm_term=>";
var con = ":utm_content=>";
var starters = [src,med,camp,term,con]; // Put all starters to check in an array
var range = sheet.getDataRange();
var data = range.getValues();
data = data.map(row => row.map(value => { // Iterate through all rows and cells
  var includesStarter = starters.some(starter => value.includes(starter)); // Check if cell value includes a starter
  if (includesStarter) return value.split('"')[1]; // Retrieve value within quotations
  else return value; // If starter is not included in cell, don't change the array
}));
range.setValues(data); // Write modified data to original range