Заполните ячейки в указанных c столбцах, если ячейки не заполнены - PullRequest
0 голосов
/ 17 февраля 2020

Привет! Я хочу отредактировать эту функцию, которую я видел в более старом сообщении, чтобы что-то более динамичное c и могло фактически заполнить пробелы в правом столбце, поскольку сейчас оно заполняет столбец B вместо пробелов в D. Вот функция, которую я имею

function Absent() {
  var tss = SpreadsheetApp.getActiveSpreadsheet();
  var values = tss.getRange("Attendance!D1:D20").getValues();

  for(i=0; i<values.length; i++) {
    var value = values[i][0];

    if (value == "") {
      var rangeB = tss.getSheetByName("Attendance").getRange(i+1,2);

      if(!rangeB.isBlank()) {
        rangeB.setValue("A");
      }
    }
  }
}

enter image description here В настоящее время у меня есть ситуация, что есть имена в столбце A, которые помечены буквой P (потому что они присутствует) в столбцах «D», «H», «J», «L», «N», «P», «R», «T», «V», «X», «Z», «AB». "," AF "," AH "," AJ "," AL "," AN "Люди, которых там нет, оставлены пустыми, но я хотел бы заполнить их буквой A, когда я запускаю сценарий через кнопку. Здесь вы можете увидеть лист . Сценарий ниже - это то, что я запускаю первым, чтобы добавить Ps всем присутствующим, но я не уверен, как редактировать, куда после добавления P он возвращается и если имя не найдено поставить A, поэтому я делаю второй сценарий. Но если есть способ просто добавить его к этому, это было бы здорово!


  var sprsheet = SpreadsheetApp.getActiveSpreadsheet();
  var transpose = sprsheet.getSheetByName("Transpose");
  var attendance = sprsheet.getSheetByName("Attendance");

  //Ranges of Transpose
  var colDates = transpose.getRange("D1:BU1").getValues();
  var attendees = transpose.getRange("D2:BU2").getValues();

  //Ranges of Attendance
  var eventsCol = ["D","H","J","L","N","P","T","V","X","Z","AB","AF","AH","AJ","AL","AN","AR","AT","AV","AX","AZ","BD","BF","BH","BJ","BL","BP","BR","BT","BV","BX","BZ"]; //Add Column letters is need more dates added 
  var kids = attendance.getRange("A2:A205").getValues(); //Increase this if you add more names 

  loop1:
  for (var i = 0; i < eventsCol.length; i++){ //For each column 

    var list = getIndividuals(attendees[0][i]); //Get the list of each Transpose row 2

    loop2:
    for (var x = 0; x < kids.length; x++){ //For each name in Attendance

      loop3:
      for (var y = 0; y < list.length; y++){ //Compare it with each name of the list

        if (list[y] == kids[x][0] || list[y] == " " + kids[x][0]){ //Second "or" is in case there is an space in the first position.

        attendance.getRange(eventsCol[i]+(x+2)).setValue("P");

          break loop3; //Once it finds a name it makes no sense to keep searching. Go back to the next name.

         }         
        } 

      }

    }
  }


//Split the list into each name, removing the first space
function getIndividuals(attendees){

  var individuals = attendees.split(",");

  for (var i = 0; i < individuals.length; i++){ 

    if (individuals[i][0] == " "){

      individuals[i][0].replace(" ", "");

    }

  }

  return individuals;
}

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Заполнение тары А

Хмм. Отличная школа. Вы получаете А, даже если не появляетесь.

function fillTheEmptiesWithA() {
  var ss=SpreadsheetApp.getActive();
  var cols= ["D","H","J","L","N","P","R","T","V","X","Z","AB","AF","AH","AJ","AL","AN"];
  var sh=ss.getSheetByName('Attendance');
  var sr=3;
  cols.forEach(function(c,i){
    var col=sh.getRange(c+1).getColumn();
    var rg=sh.getRange(sr,col,sh.getLastRow()-sr+1,1)
    var vals=rg.getValues();
    vals.forEach(function(p,j,v){if(p==''){v[j][0]='A';}});
    rg.setValues(vals);
  });
}

Согласно этому var kids = attendance.getRange("A2:A205").getValues(); ваши данные начинаются со строки 2. Согласно вашему изображению ваши данные начинаются со строки 3. Я помещаю startRow (sr) в код, чтобы вы могли решить, какой из них будет позже.

Анимация:

enter image description here

* Эта версия только заполняет пустые поля, когда строка заголовка не пуста в каждом столбце

function runTwo() {
  var ss=SpreadsheetApp.getActive();
  var cols= ["D","H","J","L","N","P","R","T","V","X","Z","AB","AF","AH","AJ","AL","AN"];
  var sh=ss.getSheetByName('Attendance');
  var sr=3;
  cols.forEach(function(c,i){
    var col=sh.getRange(c+1).getColumn();
    if(sh.getRange(sr-1,col).getValue()!='') {
      var rg=sh.getRange(sr,col,sh.getLastRow()-sr+1,1)
      var vals=rg.getValues();
      vals.forEach(function(p,j,v){if(p==''){v[j][0]='A';}});
      rg.setValues(vals);
    }
  });
}
0 голосов
/ 17 февраля 2020

Ваш текущий скрипт выполняет следующие действия: 1) Получите D1: 10 2) проверьте значения D1: D10, чтобы увидеть, какой из них пуст 3) Если диапазон пуст, установите значение A во 2-м столбце.

следующий скрипт будет: 1) проверять заданный диапазон 2) проверять пустое значение 3) устанавливать значение A в том же диапазоне

  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var checkrange = sheet.getRange(2,1,9,1).getValues(); //range to check getRange(starting row, starting column,number of rows to check, number of column to check)

  for( i=0; i<checkrange.length; i++){ 
    var content = checkrange[i];

    if (content ==""){
      sheet.getRange(i+2,1).setValue("A"); //plus 1 because first item in array is a 0, but it would be in row 1, plus another 1 because of header. to change the column, change the 1 to whichever column you need
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...