Запустите скрипт в Google Sheets, который генерирует формулы в ячейки, когда указанная ячейка c не пуста - PullRequest
0 голосов
/ 10 апреля 2020

Я ищу сценарий , который генерирует 2 формулы в Col16 и Col17, когда Col15 редактируется . Мои формулы из функций Google:

  • В Col16: = if (O12 <> ""; today (); "")
  • В Col17: = if (O12 = ""; ""; сцепленный (текст (P12; "ГГГГ-ММ-ДД"); "-"; E12; "-"; O12))

Мне нужен этот скрипт для запуска для 5 листов под названием «Мириам», «Элиза», «Виктор», «Ханане», «Сара».

function onEdit(event) {
  // assumes source data in sheet named Elisa-Miriam-Victor-Hanane-Sarah-Apoorva
  // 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();

  // When a client is mentioned in Col3, fill automatically Col23 or W by the PM name and generate the checkbox from data validation in Col2 or B   
  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());
    var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build()
    s.getRange(lastRow,2).setDataValidation(rule);
  }

  // Fill automatically Columns P and Q when PO number is provided in Column O.
  //In P: generates the date of when the PO is mentioned; in Q: it generates the PO folder name
  var sh=event.range.getSheet();
  var namesA=["Miriam","Elisa","Hanane","Sarah","Apoorva","Victor"];
  if(namesA.indexOf(sh.getName())!=-1 && e.range.columnStart==15) {
     event.range.offset(0,1).setValue(new Date()).setNumberFormat("yyyy-MM-dd");
     event.range.offset(0,2).setFormula(Utilities.formatString('=CONCATENATE(P%s,"-",E%s,P%s)',event.range.rowStart,event.range.rowStart,event.range.rowStart));
   }     

  // Archive a project with checked box from Archive Sheet
 if((s.getName() == "Miriam"||s.getName() == "Elisa"||s.getName() == "Hanane"||s.getName() == "Sarah"||s.getName() == "Apoorva"||s.getName() == "Victor")&& 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);   
}
}

Мне удалось сгенерировать в Col16 дату, когда Col15 редактируется. Но Я не понимаю, почему сценарий не работает для Col17 с объединенной формулой .

1 Ответ

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

Попробуйте это:

function onEdit(e) {
  var sh=e.range.getSheet();
  var namesA=["Miriam","Elisa","Hanane","Sarah","Apoorva","Victor"];
  if(namesA.indexOf(sh.getName())!=-1 && e.range.columnStart==15) {
     e.range.offset(0,1).setValue(new Date()).setNumberFormat("yyyy-MM-dd");
     e.range.offset(0,2).setFormula(Utilities.formatString('=CONCATENATE(P%s,"-",E%s,P%s)',e.range.rowStart,e.range.rowStart,e.range.rowStart));
   }     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...