Перенести найденные данные в окно сообщения - PullRequest
0 голосов
/ 09 июля 2020

Когда я открываю лист, я использую следующие коды, чтобы предупреждать, когда продукт достигает критического предела за день до его поступления в продажу. Например: если в ячейках «H4: H100» на странице «КАЛЕНДАРЬ» написано «ДА», данные отображаются в столбце «А» в строке с «ДА» и отображаются в виде отдельного сообщения. box.

      A Column       G Column   H Column
4      ASUS              7         YES
5       HP               8
6      DELL              5         YES
7     LENOVO             9
8      MSI               10
...

Script in the Scenario:     Browser.msgbox("ASUS product has 7 days to go on sale.");
                            Browser.msgbox("DELL product has 5 days to go on sale.");

The result I want it to be: Browser.msgbox("ASUS product has 7 days to go on sale. \\nDELL product has 5 days to go on sale.");


Как добавить найденные данные в одно окно сообщения?

Спасибо.

function alarm(findArray) {
  var findArray=findArray||["YES"];//default



  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('CALENDAR');
  var hA2=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var condition=ss.getSheetByName('CALENDAR').getRange('H4:H100').getValues();//default
  var CALENDARsheet = ss.getSheetByName('CALENDAR')
  var hA = [].concat.apply([], condition).filter(String);
  var cObj={};
  for(var i=0;i<hA.length;i++) {
    cObj[String(hA[i]).toLowerCase()]=i+1;
  }
  var srg=sh.getRange(2,8,sh.getLastRow()-1,1);
  for(var i=0;i<findArray.length;i++) {
    var f=srg.createTextFinder(String(findArray[i])).matchCase(true).findAll();
    var d=0;
    if(f.length>0) {
      for(var j=0;j<f.length;j++) {
       // sh.deleteRow(f[j].getRow()-d++);
        Browser.msgBox('ALERT ALERT', CALENDARsheet.getRange(f[j].getRow()-d,1).getValue() + '  product has  ' + CALENDARsheet.getRange(f[j].getRow()-d,7).getValue()  + ' days to go on sale.', Browser.Buttons.OK);

      }
    }
  }  
}

1 Ответ

2 голосов
/ 09 июля 2020

Вам необходимо сначала получить сообщения для всех YES продуктов, а после того, как вы их все получили, позвоните Browser.msgBox.

Метод 1. Объединение массива:

Вы может использовать массив, содержащий сообщения для каждого продукта, и вызывать msgBox после завершения для l oop, предоставляя строку, возвращаемую путем присоединения к массиву с помощью Array.prototype.join () :

  var messages = [];
  for(var i=0;i<findArray.length;i++) {
    var f=srg.createTextFinder(String(findArray[i])).matchCase(true).findAll();
    var d=0;
    if(f.length>0) {
      for(var j=0;j<f.length;j++) {
        messages.push(CALENDARsheet.getRange(f[j].getRow()-d,1).getValue() + '  product has  ' + CALENDARsheet.getRange(f[j].getRow()-d,7).getValue()  + ' days to go on sale.');        
      }
    }
  }
  Browser.msgBox('ALERT ALERT', messages.join("\\n"), Browser.Buttons.OK); 

Метод 2. Конкатенация строк:

Другой вариант - объединить все сообщения в одну строку с помощью String.prototype.concat () ; определите message как пустую строку перед вашим внешним l oop и замените свой внутренний l oop код следующим:

message = message.concat("\\n", CALENDARsheet.getRange(f[j].getRow()-d,1).getValue() + '  product has  ' + CALENDARsheet.getRange(f[j].getRow()-d,7).getValue()  + ' days to go on sale.');

А также после for l oop вызовите msgBox:

Browser.msgBox('ALERT ALERT', message, Browser.Buttons.OK); 

Примечание:

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

...