Google apps script 应用程序脚本如果标题包含x,则插入2列

Google apps script 应用程序脚本如果标题包含x,则插入2列,google-apps-script,Google Apps Script,我编写了一些代码,如果“y”文本与标题列中的值匹配,则插入x个列。代码是有效的,但是,有没有办法让代码匹配,只说最后两个单词?因此,我需要搜索标题值是否包含单词“Teacher Target”,如果匹配,则在该列之前插入两列,但是我有其他列包含标题“Teacher Target-EFG”,我不需要在这些列之前插入列 我使用的代码是: function insCols(e) { var lastColumn = ss.getLastColumn(); var headers = ss.g

我编写了一些代码,如果“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);
    }
  }
}
希望这是有意义的

谢谢


Fazila

您可以尝试使用Headerstring.slice(-14)=“教师目标”

此函数使用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) {

      }
    }
  });
}

假设您只希望在相应的标题以“教师目标”结尾时添加列,只需更改此行即可实现此目的:

if(名称[i].indexOf(searchVal)>-1){
对于这一点:

if(名称[i].slice(-14)=“教师目标”){
另一种选择是使用
子字符串
,但我认为
切片
是在您的情况下最简单的方法:

if(名称[i]。子字符串(名称[i]。长度,名称[i]。长度-14)=“教师目标”){
笔记: 我假设您没有提供完整的代码(代码本身无法工作,它使用的是未定义的变量)

参考:

我希望这能有所帮助。

不太清楚您在这里需要什么-如果文本完全是“教师目标”,或者如果最后两个单词是“教师目标”,您是否只需要插入列?最后两个单词是教师目标。谢谢,rossI希望保留输入框,因为我希望代码可以在其他表格中使用,并且不会总是在包含教师目标的列之前插入列。您仍然可以保留输入框,这只是一种查找将教师目标作为最后14个或更多个标题的方法吗因此,字符是一个非常愚蠢的问题,但我应该在哪里插入这一行?我目前使用的解决方法是在教师目标后插入+符号,然后搜索“教师目标+”,幸运的是,它起了作用,但会有兴趣了解是否有更好的方法。感谢Cooper为您提供了令人惊讶的帮助:)