Сценарий приложения Вставьте 2 столбца, если заголовок содержит х - PullRequest
0 голосов
/ 14 января 2020

Я собрал некоторый код для вставки x столбцов, если текст " y " соответствует значению в столбце заголовка. Код работает, однако, есть ли способ заставить код соответствовать, скажем, только последние два слова? Поэтому мне нужно поискать, содержит ли значение заголовка слова «Цель учителя», и если оно совпадает, вставить два столбца перед этим столбцом, однако у меня есть другие столбцы, содержащие заголовок «Цель учителя - 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);
    }
  }
}

Надеюсь, это имеет смысл.

Спасибо

Фазила

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вы можете попробовать использовать 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) {

      }
    }
  });
}

enter image description here

0 голосов
/ 15 января 2020

Предполагая, что вы хотите, чтобы столбцы добавлялись только в том случае, если соответствующий заголовок заканчивается словами «Цель учителя», вы можете добиться этого, просто изменив эту строку:

if (names[i].indexOf(searchVal) > -1) {

На эту:

if (names[i].slice(-14) == "Teacher Target") {

Другой вариант будет использовать substring, но я думаю, slice - самый простой способ в вашей ситуации:

if (names[i].substring(names[i].length, names[i].length - 14) == "Teacher Target") {

Примечания:

Я при условии, что вы не предоставили полный код (код не может работать, он использует переменные, которые не определены).

Ссылка:

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...