Как расширить мою функцию во всех флажках в документе строка за строкой? - PullRequest
4 голосов
/ 24 апреля 2019

Моя функция хорошо работает для одного ряда моего листа (строка 4).
Но я хочу проверить все строки в столбцах 2 и 7, где установлены флажки.
Я думал о цикле, но я хотел бы использовать массивы для лучшего и более эффективного кода.

ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName("Feuille 1");

function alertbox(){
  var box1= sheet.getRange(4, 2).getValue();
  var box2 =sheet.getRange(4, 7).getValue();

  if (box1 ==true && box2 == true) {
    var activcell = sheet.getActiveCell();
    showAlert(activcell);
  }

};
function showAlert(activcell) {
  var ui = SpreadsheetApp.getUi();

  var result = ui.alert(
     'Conflit entre un autre hôtel qui a réservé aux même dates que vous !',
     'Vous êtes sûr de continuer ?',
      ui.ButtonSet.YES_NO);

  // utiliser les réponses des utilisateurs
  if (result == ui.Button.YES) {
    //  clicked "Yes".
    ui.alert('Voyez avec l autre hôtel !');
  } else {
    // User clicked "No" or "X".
    ui.alert('Ok on enlève votre choix...');
    activcell.setValue(false);
  }
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Я попробовал цикл, который вы предлагаете, но я сделал некоторые исправления:

  • , поскольку значения представляют собой двумерный массив: if (box1[r][0] == true && box2[r][0] == true){

  • потому что цикл начинается с 0, я помещаю минус один в длину: for (var r=0; r <= box1.length - 1; r++){

но теперь он работает нормально и большое спасибо за вашу помощь.

0 голосов
/ 30 апреля 2019

Существует несколько способов построения массива ...

1-й способ - получить последнюю строку листа и использовать ее в методе getRange

var lastRow = sheet.getLastRow();    
var box1 = sheet.getRange(1, 2, lastRow).getValues();

Вторым вариантом будет использование a1Notation в getRange и удаление пробелов с помощью array.filter

var box1 = sheet.getRange("B:B").getValues().filter(String);

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

После того, как вы получите 2 массива, я бы предложил использовать цикл for для проверки box1 и box2

for(var a = 0; a <= box1.length; a++){
   if(box1[a] == true && box2[a] == true){
      var activcell = sheet.getActiveCell(); //Switch from getActiveCell() to maybe a box3 to identify what you are trying to alert
      showAlert(activcell);
   }
}

Вот некоторые ресурсы

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