Как мне написать сценарий, который находит сумму диапазона в Google Sheets, а затем делит ее на количество прошедших месяцев? - PullRequest
1 голос
/ 01 марта 2020

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

Формула относительно проста: =(SUM(J3:J26))/((month(TODAY()-1))) (J3: J26 - мой диапазон.) Но факт то, что я записываю две цифры для каждого месяца, означает, что мое среднее значение будет неточным после того, как я напишу свою вторую месячную цифру. Вот почему я решил, что мне нужно написать это как скрипт с синхронизированным триггером на 1-е число месяца. Я попробовал это следующим образом:

function myFunction()
{
    var s = SpreadsheetApp.getActiveSheet();
    s.getRange("K30").setFormula("=(SUM(J3:J26))/(month(TODAY()-1))");
 }

, но он просто вставляет формулу в лист, а не выполняет формулу только один раз в месяц. Очевидно, я очень плохо знаком с листами и сценариями, поэтому я был бы признателен за любую информацию здесь. Как заставить эту формулу работать только один раз в месяц? Или есть другая альтернатива?

1 Ответ

0 голосов
/ 02 марта 2020

Среднемесячный доход в первый день каждого месяца

function myFunction() {
  var dt=new Date();
  //Let it run on first day of ever month
  if(dt.getDate()==1) {
    var ss=SpreadsheetApp.openById('SpreadsheetID');
    var sh=ss.getSheetByName('SheetName');
    sh.getRange("K30").setFormula("=(SUM(J3:J26))/(month(TODAY()-1))");
    SpreadsheetApp.flush();
    sh.getRange("K30").setValue(sh.getRange("K30").getDisplayValue());
  }
}

//Run this to create trigger for above function the trigger runs every day sometime between 2 and 3 am.
function createTrigger() {
  var pt=ScriptApp.getProjectTriggers();
  var found=false;
  for(var i=0;i<pt.length;i++) {
    if(pt[i].getHandlerFunction()=='myfunction') {
      found=true;
      break;
    }
  }
  if(!found) {
    ScriptApp.newTrigger('myfunction').timeBased().everyDays(1).atHour(2).create();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...