Запустите скрипт на основе имен листов для разных листов в зависимости от другого скрипта - PullRequest
1 голос
/ 09 апреля 2020

вчера я опубликовал свой первый выпуск ( Архивировать строки с разных листов и удалил их в исходное положение (на исходный лист), когда я хочу разархивировать (листы Google) ), который был исправлен ( еще раз спасибо, если вы читаете меня) .

Я завершил свой сценарий следующим кодом (начиная с Когда клиент упоминается в Col3, автоматически заполните Col23 или W именем PM * ).

function onEdit(event) {
  // assumes source data in sheet named Elisa-Miriam-Victor
  // target sheet of move to named Archive
  // getColumn with check-boxes is currently set to column 2 or B
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  // Archive a project with checked box from Archive Sheet
 if((s.getName() == "Elisa"||s.getName() == "Miriam" )&& r.getColumn() == 2 && r.getValue() == true) { // copy past every time a new PM-sheet is added
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  } 
  // Unarchive a project from Archive sheet to respective owner
  else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
    var row = r.getRow();
    var nameColumn = 23;
    var name = s.getRange(row, nameColumn).getValue();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName(name);
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);

    // When a client is mentioned in Col3, fill automatically Col23 or W by the PM name    
    {
  var s = SpreadsheetApp.getActiveSheet();
  var data = s.getRange("C9:C").getValues();
  var data_len = data.length;
  for(var i=8; i<data_len; i++) {
  if(data[i][0].length == 0) {
    s.getRange(i+1,23).setValue("");
  } else {
    s.getRange(i+1,23).setValue("Miriam");
  }
  }
}
}
}

Таким образом, теперь, если на листке Мириам есть новый клиент, упомянутый в Кол. 3, Кол. 23 автоматически заполняется ее именем. Но мне нужно стандартизировать эту часть сценария, потому что у каждого нового сотрудника есть свой собственный лист (его имя), и для каждого листа сотрудника, при каждом заполнении Col3, мне нужно автоматически заполнять Col23 под именем листа.

Кто-нибудь знает, как написать сценарий для Элизы и Мириам, например?

Спасибо за помощь!

1 Ответ

2 голосов
/ 09 апреля 2020

Цель:

Напишите имя листа, если в Col3

добавлен новый клиент. Процедура:

Вы можете проверить последнюю строку Col23, чтобы увидеть, пусто и скопируйте название листа. Изменение произойдет, только если кто-то вручную отредактирует Col3.

Код:

Это пример. Вы должны будете интегрировать его в свой текущий код.

function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  var lastRow = s.getLastRow();
  var col23 = s.getRange(lastRow, 23).getValue();

  if (r.getRow() == lastRow && r.getColumn() == 3 && col23 == ""){

    s.getRange(lastRow, 23).setValue(s.getSheetName());
 }
}

Ссылки:

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