Остановить активацию скрипта, если ячейки не заполнены - PullRequest
0 голосов
/ 20 июня 2020

У меня есть следующий сценарий, который запускается флажком в столбце Y каждой строки листа «События / инциденты»:

// Copy and paste from Events/Incidents sheet to Vehicle Damage sheet
 {var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var sourcesheetname = "Events/Incidents";
  var checkbox = range.getValue();
  if (sheet.getName() == sourcesheetname && column == 25 && row > 2 && checkbox == true) {
    var targetsheetname = "Vehicle Damage";
    var target = e.source.getSheetByName(targetsheetname);
    var numCols = sheet.getLastColumn();
    var values = sheet.getRange(row, 1, 1, numCols).getValues()[0];
    values.splice(17)
    values.splice(8, 8)
    values.splice(5, 1)
    values.splice(3, 1); // Removing undesired values
    var lastRow = target.getLastRow();
    var lastCol = target.getLastColumn();
    target.appendRow(values); // Append new row
     if (lastRow >= 3) 
      target.getRange(lastRow, 10, 1, 1).copyTo(target.getRange(lastRow + 1, 10, 1, 1), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);  //Copy and paste the formula in column J 
      target.getRange(lastRow, 19, 1, 1).copyTo(target.getRange(lastRow + 1, 19, 1, 1), SpreadsheetApp.CopyPasteType.PASTE_FORMULA); //Copy & paste the formula in column S
      target.getRange(lastRow + 1, 1, 1, values.length + 12).setBorder(true, true, true, true, true, true, "white", SpreadsheetApp.BorderStyle.SOLID);
      target.getRange(lastRow, values.length).offset(1, 1).activate();}   

Когда флажок установлен, скрипт копирует столбцы A, B, C, E, G, H и Q из отмеченной галочкой строки «Событие / Инцидент »и вставляет их последовательно в столбцы A: G листа« Повреждение транспортного средства ».

Я обнаружил, что пользователи устанавливают флажок перед заполнением ячеек на листе «События / происшествия». Поэтому я хочу остановить активацию сценария до тех пор, пока все ячейки A, B, C, E, G, H и Q из отмеченной галочкой строки на листе «Событие / инцидент» не будут заполнены. Я также хотел бы, чтобы появилось сообщение о том, что пользователю необходимо сначала заполнить ячейки.

Буду признателен за помощь с этим.

1 Ответ

1 голос
/ 22 июня 2020
  • Убедившись, что флажок установлен, запросите значения в отредактированной строке
  • Убедитесь, что соответствующие значения - != "" и != " ", прежде чем продолжить
  • Иначе - предложить пользователю заполнить все интересующие столбцы

Пример:

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var sourcesheetname = "Events/Incidents";
  var checkbox = range.getValue();
  if (sheet.getName() == sourcesheetname && column == 25 && row > 2 && checkbox == true) {
    var numCols = sheet.getLastColumn();
    var values = sheet.getRange(row, 1, 1, numCols).getValues()[0];
    if(values[0] != "" && values[0] != " " && values[1] != "" && values[1] != " " && values[2] != "" && values[2] != " " && values[4] != "" && values[4] != " " && values[6] != "" && values[6] != " " && values[7] != "" && values[7] != " " && values[16] != "" && values[16] != " "){
      var targetsheetname = "Vehicle Damage";
      var target = e.source.getSheetByName(targetsheetname);
      values.splice(17)
      values.splice(8, 8)
      values.splice(5, 1)
      values.splice(3, 1); // Removing undesired values
      var lastRow = target.getLastRow();
      var lastCol = target.getLastColumn();
      target.appendRow(values); // Append new row
      if (lastRow >= 3) 
        target.getRange(lastRow, 10, 1, 1).copyTo(target.getRange(lastRow + 1, 10, 1, 1), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);  //Copy and paste the formula in column J 
      target.getRange(lastRow, 19, 1, 1).copyTo(target.getRange(lastRow + 1, 19, 1, 1), SpreadsheetApp.CopyPasteType.PASTE_FORMULA); //Copy & paste the formula in column S
      target.getRange(lastRow + 1, 1, 1, values.length + 12).setBorder(true, true, true, true, true, true, "white", SpreadsheetApp.BorderStyle.SOLID);
      target.getRange(lastRow, values.length).offset(1, 1).activate(); 
    }else {
      range.setValue(false);
      Browser.msgBox("Please fill out columns A, B, C, E, G, H and Q before ticking the checkbox");
    }
  }
}
...