Использование скрипта Google Apps для репликации ЕСЛИ (СУММЕСЛИ () ›56, (СУММЕСЛИ (),)

Я пытаюсь создать электронную таблицу, которая позволит мне отправлять электронные письма в зависимости от того, эквивалентна ли определенная ячейка («A36») «N95» или «N64», а также если диапазон (G35: G46) равен или больше "56". Раньше я добивался этого, используя формулу ЕСЛИ (СУММЕСЛИ ()> 56, (СУММЕСЛИ (), ""). Однако мой клиент хочет, чтобы в самом документе не было формул.

Вот что я пока вырезал ...


       function newFile() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var values = ss.getRange("G35:G46").getValues();
    var Ext = ss.getRange("A36").getA1Notation();
     if((values.getValue()>="56") && (Extrusion="N64")){ 
     ss.getRange=("P1:P4").setValue("2");
     }

     if ((values.getValue()>"56") && (Ext="N95")){
      ss.getRange("P1:P4").setValue("1");
      }
      }

В качестве обновления вот то, что я придумал, однако я хотел бы сжать это в небольшой скрипт. Признаюсь, я все еще учусь, и мне очень нужна помощь.

    function newFile() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var Ext = ss.getRange("A36").getValue();
         if ((ss.getRange("G35").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G36").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G37").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G38").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G39").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G40").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G41").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G42").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G43").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G44").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G45").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
         if ((ss.getRange("G46").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
       ss.getRange("L35").setValue("4");}
     }

     // .setValue("4") is just my way of letting me know if the script was successful

Готовое обновление.

Оглядываясь назад, я понял, что не опубликовал последнюю копию того, что у меня получилось.


function checkExt() {
var ssExt = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var valuesExt = ssExt.getRange("G35:G46").getValues();
var Ext = ssExt.getRange("A36").getValue();

     if ((ssExt.getRange("G35").getValue() > 55) && (Ext === "N64" || Ext === "N95")){
   sendEmails()}

Функция отправки писем разделилась на 3 разные группы людей в зависимости от значения ячейки. Я не собираюсь публиковать весь код, но вот его фрагмент.

  var email = "";
     if (ssExt.getRange("K8").getValue() === "1Q1"){
       email = MailList1stShift}
     else if  (ssExt.getRange("K8").getValue() === "2Q1"){
       email = MailList2ndShift}
     else if  (ssExt.getRange("K8").getValue() === "3Q1"){
       email = MailList3rdShift} 

person Jeremy Clowers    schedule 24.01.2020    source источник
comment
Я предлагаю вам начать с чтения developers.google.com/apps-script/guides/sheets тогда, возможно, вам придется немного изучить JavaScript, особенно о типах данных, выражениях, операторах сравнения.   -  person Rubén    schedule 25.01.2020


Ответы (1)


Если я вас правильно понял, вы хотите проверить, выполняются ли оба этих условия:

  • Значение в A36 равно N95 или N64.
  • Каждое из значений в диапазоне G35:G46 больше 55.

В таком случае вы можете сделать это:

function sendEmail() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var values = sheet.getRange("G35:G46").getValues();
  var a36 = sheet.getRange("A36").getValue();
  var n95 = sheet.getRange("N95").getValue();
  var n64 = sheet.getRange("N64").getValue();
  var higher = values.every(function(value) {
    return value >= 56;
  })
  if ((a36 === n95 || a36 === n95) && higher) {
    // Send email
  }
}

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

Ссылка:

Я надеюсь, что это поможет.

person Iamblichus    schedule 27.01.2020
comment
Это действительно помогает, но я пытаюсь настроить для n95 и n64 значение, которое я ищу, а не ссылку на ячейку. - person Jeremy Clowers; 29.01.2020
comment
Также мне не нужно искать сумму G45: G46, а лучше проверять каждую ячейку, чтобы узнать, составляет ли она 56 или больше. - person Jeremy Clowers; 29.01.2020
comment
@JeremyClowers Я отредактировал свой вопрос так, чтобы он проверял, равны ли все значения в G35:G46 или больше 56. Что касается вашего другого комментария, я не уверен, что понимаю, что вы имеете в виду. Прямо сейчас он проверяет, равно ли значение в N64 или в N95 значению в A36. Разве это не то, что вы ищете? - person Iamblichus; 29.01.2020
comment
Спасибо, lamblichus, я впервые за несколько месяцев запрыгнул и понял, что никогда не принимал ответ. Это сработало, но я кое-что понял сам. Оглядываясь назад на свой предыдущий ответ, я вижу плохое мышление, которое у меня было в то время, еще один пример того, почему я должен писать только поздно, когда у меня в руках кофе. - person Jeremy Clowers; 25.04.2020