Нужна помощь, чтобы автоматически запустить формулу листов Google - PullRequest
0 голосов
/ 03 июля 2019

Я составил формулу (я ни в коем случае не программист), чтобы работать в соответствии с потребностями Google Sheets.Но я должен запустить код вручную, как только новые ячейки будут обновлены из формы Google.Затем я перевожу определенные ячейки на другой лист, чтобы представить отчет с этой информацией, поэтому мне нужна эта формула для запуска каждый раз, когда появляется новая информация.У меня также есть столбец («O: O»), который загружается с предыдущей даты, и я не хотел бы, чтобы он загружался на следующий день, пока не появится отметка времени из записи формы, потому что она делает загрузку листа разной за несколько дней..

function myFunction() {
 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("N2").setFormula("=(I2*0.01)+(H2*0.05)+(G2*0.1)+(F2*0.25)+(E2*0.5)+(D2)+(C2)");

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 14, lr-1);
  ss.getRange("N2").copyTo(fillDownRange);


  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("M2").setFormula("=N2-L2-J2");

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 13, lr-1);
  ss.getRange("M2").copyTo(fillDownRange);


     var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("P3").setFormula("=N3-O3");

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 16, lr-1);
  ss.getRange("P3").copyTo(fillDownRange);


       var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("O3").setFormula("=M2");

    var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(3, 15, lr+1);
  ss.getRange("O3").copyTo(fillDownRange);

         var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("Q2").setFormula("=A2");

           var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("Q2").setNumberFormat('dd MMM yyyy');

    var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 17, lr-1);
  ss.getRange("Q2").copyTo(fillDownRange);


}

Моя формула работает, но, как я уже сказал, я бы хотел, чтобы столбец O не загружался раньше записей, а скорее ждал, пока сработает новая отметка времени, и я бы хотел, чтобы моя формула вычислялась как можно скорее.есть новая информация.Заранее спасибо и извините, если мой вопрос сделан плохо.(Мой первый раз на стеке Exchange)

1 Ответ

0 голосов
/ 04 июля 2019

Это будет работать, когда любой лист в вашей электронной таблице будет отредактирован.OnEdit () гарантирует, что реальный пользователь редактирует лист, поэтому он может использовать activeSpreadsheet () и activeSheet ().

function onEdit() {
  var ss = SpreadsheetApp.getActiveSheet();
  ss.getRange("N2").setFormula("=(I2*0.01)+(H2*0.05)+(G2*0.1)+(F2*0.25)+(E2*0.5)+(D2)+(C2)");
  ss.getRange("N2").copyTo(ss.getRange(2,14,ss.getLastRow()-1));
  ss.getRange("M2").setFormula("=N2-L2-J2");
  ss.getRange("M2").copyTo(ss.getRange(2, 13, ss.getLastRow()-1));
  ss.getRange("P3").setFormula("=N3-O3");
  ss.getRange("P3").copyTo(ss.getRange(2, 16, ss.getLastRow()-1));
  ss.getRange("O3").setFormula("=M2");
  ss.getRange("O3").copyTo(ss.getRange(3, 15, ss.getLastRow()-2));
  ss.getRange("Q2").setFormula("=A2");
  ss.getRange("Q2").setNumberFormat('dd MMM yyyy');
  ss.getRange("Q2").copyTo(ss.getRange(2, 17, ss.getLastRow()-1)); 
}

Эта функция будет запускаться всякий раз, когда отправляется новая форма.Но вы не можете использовать activeSpreadsheet () или activeSheet ().Вы должны предоставить идентификатор электронной таблицы и имя листа.

function onFormSubmitFunc() {
  var ss = SpreadsheetApp.openById('id').getSheetByName('somesheetname');
  ss.getRange("N2").setFormula("=(I2*0.01)+(H2*0.05)+(G2*0.1)+(F2*0.25)+(E2*0.5)+(D2)+(C2)");
  ss.getRange("N2").copyTo(ss.getRange(2,14,ss.getLastRow()-1));
  ss.getRange("M2").setFormula("=N2-L2-J2");
  ss.getRange("M2").copyTo(ss.getRange(2, 13, ss.getLastRow()-1));
  ss.getRange("P3").setFormula("=N3-O3");
  ss.getRange("P3").copyTo(ss.getRange(2, 16, ss.getLastRow()-1));
  ss.getRange("O3").setFormula("=M2");
  ss.getRange("O3").copyTo(ss.getRange(3, 15, ss.getLastRow()-2));
  ss.getRange("Q2").setFormula("=A2");
  ss.getRange("Q2").setNumberFormat('dd MMM yyyy');
  ss.getRange("Q2").copyTo(ss.getRange(2, 17, ss.getLastRow()-1)); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...