Получение последней строки данных, игнорирование формул и использование данных строк для отправки электронной почты - Google Apps Script - PullRequest
0 голосов
/ 23 сентября 2019

Я собираю данные из формы Google, которая будет использоваться в формулах для расчета затрат и пробега.Я использовал = QUERY, чтобы перенести ответы на другой лист «Калькулятор событий».Когда я запускаю цикл forEach для получения данных, он собирает ячейки с формулой.Я хотел бы, чтобы мой код нашел последнюю строку с данными и вытащил несколько цифр из ячеек, чтобы использовать их в электронном письме, которое будет отправлено сразу после отправки формы (по триггеру).Есть ли способ найти последнюю строку и затем запустить цикл forEach?или я все делаю неправильно?

Я пытался использовать операторы if и forEach, но, похоже, не имеет правильного порядка и не могу просто найти последнюю строку с данными в ней, а неформула.

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

Я пытался использовать forEachцикл, но он возвращает строки, содержащие формулы.Я пробовал операторы if, но, похоже, не могу заставить его работать с циклом forEach для получения данных.

function travelReport() {

  // get data from the Sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Event Calculator');
  var allRange = sheet.getDataRange();
  var allData = allRange.getValues();

  // remove the header row
  allData.shift();

  // loop over rows of data
  allData.forEach(function(row) {


    // get data
    var email = row[0];
    var eventName = row[1];
    var coordName = row[2];
    var  startName = row[3];
    var destinationName = row[4];
function travelReport() {

  // get data from the Sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Event Calculator');
  var allRange = sheet.getDataRange();
  var allData = allRange.getValues();

  // remove the header row
  allData.shift();

  // loop over rows of data
  allData.forEach(function(row) {

На данный момент результат заключается в том, что цикл forEach собирает все строки, в которых есть формулаПри попытке добавить код для поиска последней строки с данными возникает несколько ошибок.

1 Ответ

0 голосов
/ 23 сентября 2019

Попробуйте этот подход:

function travelReport(e) {
  var ss=SpreadsheetApp.getActive();
  Logger.log(e);
  //I assume timestamp is actually e.values[0].  But you can just look at Logger.log to figure it out.
  var email=e.values[1];
  var eventName=e.values[2];
  var coordName=e.values[3];
  var startName=e.values[4]
  var destinationName=e.values[5];
  GmailApp.sendEmail(email, subject, body, options);//Presumably you know how to configure all of this

}

function createTrigger(name) {
  var ss=SpreadsheetApp.getActive();
  if(!isTrigger(name)) {
    ScriptApp.newTrigger(name).forSpreadsheet(ss.getId()).onFormSubmit().create();
  }
}

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for(var i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}

Хотите более точный ответ ... Дайте мне больше деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...