Превращение оператора = IFS в скрипт в Google Sheets - PullRequest
0 голосов
/ 26 февраля 2019

В текущей книге Google Sheets (на главной вкладке под названием «Мастер») эта формула в настоящее время находится в столбце E, начиная со строки 3 и опускаясь до конца листа.

=IFS(V3="","",AND(V3<>"", AJ3=""),"Needs Invoice"
,AND(AJ3<>"", AM3=""),"Payment Due",AI3<>AN3,"Partial Payment Due",AI3=AN3,"Paid")

Для ясности:

  • Если "V" пусто, "E" также пусто
  • Если "V" НЕ пусто и AJ являетсяпусто, «E» означает «Требуется счет»
  • Если AJ НЕ пуст, а AM не заполнено, «E» означает «Платеж подлежит оплате»
  • Если AI и AN оба имеют значения и НЕ являютсяравно «E» означает «Частичная оплата»
  • Если AI и AN имеют значения и равны, «E» означает «Оплачено»

Это работает для того, что мне нужноэто нужно сделать, но я бы предпочел использовать его как скрипт для заполнения столбца E и выполнения редактирования столбцов V, AI, AJ, AM или AN (столбцы, использованные в приведенной выше формуле).

Я понятия не имею, как начать, поскольку это намного выше моего уровня квалификации.Любая помощь будет отличной!

1 Ответ

0 голосов
/ 27 февраля 2019
  • Если "V" пусто, "E" также пусто
  • Если "V" НЕ пусто и AJ пусто, "E" означает "Требуется счет"
  • Если AJ НЕ является пустым, а AM пустым, «E» означает «Срок оплаты»
  • Если AI и AN оба имеют значения и НЕ равны, «E» означает «Частичный платеж»
  • Если AI и AN оба имеют значения и равны, «E» означает «Оплачено»
function ifToScript() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Master');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++) {
    if(!vA[i][21]) {
      vA[i][4]='';
    }
    if(vA[i][21] && !vA[i][35]) {
      vA[i][4]="Needs Invoice";
    }
    if(vA[i][35] && !vA[i][38]) {
      vA[i][4]="Payment Due";
    }
    if(vA[i][34] && vA[i][39] && vA[i][34]!=vA[i][39]) {
      vA[i][4]="Partial Payment Due";
    }
    if(vA[i][34] && vA[i][39] && vA[i][34]==vA[i][39]) {
      vA[i][4]="Paid";
    }  
  }
  rg.setValues(vA);
}

Попробуйте следующее как onEdit().Примечание: длина ВА всегда будет равна 1.

function onEdit(e) {
  var ss=e.source;
  var rg=e.range;
  var sh=e.range.getSheet();
  var col=e.range.columnStart;
  var row=e.range.rowStart;
  var colA=[22,35,36,39,40]
  if(sh.getName()!='Master'){return;}
  if(colA.indexOf(col)>-1 && sh.getName()=='Master'){
    var rg=sh.getRange(e.range.rowStart,1,1,40);
    var vA=rg.getValues();
    for(var i=0;i<vA.length;i++) {
      if(!vA[i][21]) {
        vA[i][4]='';
      }
      if(vA[i][21] && !vA[i][35]) {
        vA[i][4]="Needs Invoice";
      }
      if(vA[i][35] && !vA[i][38]) {
        vA[i][4]="Payment Due";
      }
      if(vA[i][34] && vA[i][39] && vA[i][34]!=vA[i][39]) {
        vA[i][4]="Partial Payment Due";
      }
      if(vA[i][34] && vA[i][39] && vA[i][34]==vA[i][39]) {
        vA[i][4]="Paid";
      }  
    }
  rg.setValues(vA);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...