Копировать электронную таблицу / время триггера не работает, но ручной триггер работает хорошо - PullRequest
0 голосов
/ 25 апреля 2019

Просто интересно, может ли кто-нибудь мне помочь? Я новичок в Apps Script, даже не профессиональный разработчик.

Цель моих приведенных ниже кодов - извлечь данные приложения Android из Appsflyer на лист ExportTemp, затем скопировать строки данных в последнюю строку другого листа Daily_Android, а затем удалить все дублированные строки. затем сделайте то же самое для данных iOS.

Он работает хорошо, когда я вручную запускаю коды, но функция cloneGoogleSheet () не срабатывает при срабатывании по времени, хотя в журнале говорится, что он работает успешно, но функция AppsflyerExport () работает нормально. то есть данные appsflyer были перетащены в лист ExportTem, но они не были скопированы в лист Daily_Android при запуске по времени (один раз в день).

Большое спасибо

Jason

   function AppsflyerMain(){

  var spreadSheetID = '******';
  var spreadSheet = SpreadsheetApp.openById(spreadSheetID);
  SpreadsheetApp.setActiveSpreadsheet(spreadSheet);
 var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
 var now = new Date();
 var from = new Date(now.getTime() - 1 * MILLIS_PER_DAY);
 var to = new Date(now.getTime() - 1 * MILLIS_PER_DAY);
 //export Android 
   var fromDate = Utilities.formatDate(from, 'Asia/Jakarta', 'yyyy-MM-dd');
   var toDate = Utilities.formatDate(to, 'Asia/Jakarta', 'yyyy-MM-dd');

   var appID = '****';
   var apiToken = '****';
   var reportType = 'daily_report';
   var sourceSheetName = 'ExportTemp';
   var datastoreSheetName = 'Daily_Android';

   var sheet_andr = spreadSheet.getSheetByName(sourceSheetName);
  if (sheet_andr == null) {
      sheet_andr = spreadSheet.insertSheet(sourceSheetName);
      }

  AppsflyerExport(sheet_andr,appID, apiToken,reportType,fromDate,toDate);
  cloneGoogleSheet(spreadSheetID, spreadSheetID, sourceSheetName,datastoreSheetName);
  removeDuplicates(spreadSheetID,datastoreSheetName);

  //export iOS
    appID = '****';
    apiToken = '*****';
    reportType = 'daily_report';
    sourceSheetName = 'ExportTempiOS';
    datastoreSheetName = 'Daily_iOS';

    var sheet_ios = spreadSheet.getSheetByName(sourceSheetName);
  if (sheet_ios == null) {
      sheet_ios = spreadSheet.insertSheet(sourceSheetName);
      }

  AppsflyerExport(sheet_ios,appID, apiToken,reportType,fromDate,toDate);
  cloneGoogleSheet(spreadSheetID, spreadSheetID, sourceSheetName,datastoreSheetName);
  removeDuplicates(spreadSheetID,datastoreSheetName);
}

function AppsflyerExport(sheet,appID,apiToken, reportType,fromDate, toDate){

     request_url = '=importdata("https://hq.appsflyer.com/export/'+appID+'/'+reportType+'/v5?api_token='+ apiToken + '&from='+fromDate+'&to='+toDate+'")';
      sheet.clear({contentsOnly: true});

      sheet.getRange(1, 1).setValue(request_url); 
  }

function cloneGoogleSheet(ssAID,ssBID,sourceSheet,targetSheet) {
var ssA = SpreadsheetApp.openById(ssAID);
var ssB = SpreadsheetApp.openById(ssBID);
  // source sheet
  var ss = ssA.getSheetByName(sourceSheet);
   if (ss == null) {
      ss = ssA.insertSheet(sourceSheet);
      }
  // Get full range of data, exclude first row the title row

  var SRange = ss.getRange(2, 1, ss.getMaxRows(), ss.getMaxColumns());

  // target sheet
  var ts = ssB.getSheetByName(targetSheet); 

  if (ts == null) {
      ts = ssB.insertSheet(targetSheet);
      }

  var TRange = ts.getDataRange();
  var ts_numRows = TRange.getNumRows();
  var ts_nextRow = ts_numRows +1;
Logger.log('last row of ' + targetSheet + ' is ' + ts_numRows);
console.log('last row of ' + targetSheet + ' is ' + ts_numRows);
  //copy source data to last row of target sheet
  SRange.copyTo(ts.getRange(ts_nextRow, 1));
 Logger.log('copied new data from row '+ts_nextRow);
 console.log('copied new data from row '+ts_nextRow);
};



function removeDuplicates(ssID, sheetName) {
 var ss = SpreadsheetApp.openById(ssID);
  var sheet = ss.getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if (row.join() == newData[j].join()) {    // this is to check the duplicate of whole row
      //if(row[0] == newData[j][0] ){
  duplicate = true;
}
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

1 Ответ

0 голосов
/ 25 апреля 2019

Вы поняли, что дважды отправляете один и тот же идентификатор листа в cloneGoogleSheet?И, таким образом, открыть его дважды как два разных имени в этой функции?

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