首页 > 解决方案 > 如果标题包含 x,则 Apps 脚本插入 2 列

问题描述

如果“ y ”文本与标题列中的值匹配,我已经整理了一些代码来插入 x列。代码有效,但是,有什么方法可以让代码只匹配最后两个单词?所以我需要搜索标题值是否包含单词“Teacher Target”,如果它匹配在该列之前插入两列,但是我有其他包含标题“Teacher Target - EFG”的列我不需要在这些之前插入列.

我正在使用的代码是:

function insCols(e) {

  var lastColumn = ss.getLastColumn();
  var headers = ss.getRange('1:1').getValues();

  var searchVal = ui.prompt("Enter name of column to be inserted").getResponseText();
  var noCols = ui.prompt("Number of columns to be inserted").getResponseText();

  var names = headers[0];
  var loopCounter = names.length - 1

  for (var i = loopCounter; i >= 1; i--) {
    if(names[i].indexOf(searchVal) > -1) {
      ss.insertColumnsBefore(i + 1, noCols);
    }
  }
}

希望这是有道理的。

谢谢

法兹拉

标签: google-apps-script

解决方案


您可以尝试使用 Headerstring.slice(-14)==“Teacher Target”</p>

此函数使用 onEdit 可安装触发器运行。

function insCols(e) {
  e.source.toast('flag1');
  var sh=e.range.getSheet();
  if(sh.getName()!='Sheet222') return;
  var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var nc=0;
  hA.forEach(function(e,i){
    if(e.slice(-14)=="Teacher Target") {
      var msg=Utilities.formatString('Enter names of columns to be inserted next to left of column %s separated by commas.',i+1+nc);
      var resp=SpreadsheetApp.getUi().prompt(msg,SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
      if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
        var nA=resp.getResponseText().split(',');
        var cn=i+1+nc;
        nA.forEach(function(n,j){
          sh.insertColumnBefore(cn+j);  
          sh.getRange(1,cn+j).setValue(nA[j]);
          SpreadsheetApp.flush();
          nc++;
        });

      }
      if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.CANCEL) {

      }
    }
  });
}

在此处输入图像描述


推荐阅读