在第一个完成时执行第二个功能

时间:2020-07-24 19:23:48

标签: javascript google-apps-script google-sheets google-forms

我有一个GS代码,该代码具有三种不同的功能,这些功能可以通过表单提交激活。

第一个功能:

function processForm(formObject){  
  if(formObject.RecId && checkID(formObject.RecId)){
    updateData(getFormValues(formObject),globalVariables().spreadsheetId,getRangeByID(formObject.RecId));
  }else{ 
 
    appendData(getFormValues(formObject),globalVariables().spreadsheetId,globalVariables().insertRange);
       
    
    var form = FormApp.create(formObject.nombre)
    .setAllowResponseEdits(false)
    .setCollectEmail(false)
    .setDescription(formObject.fechaprev)
    .setRequireLogin(false)
    .setShowLinkToRespondAgain(false);
  
    var newname = formObject.nombre;
    form.setDestination(FormApp.DestinationType.SPREADSHEET, globalVariables().spreadsheetId);
}

当第一个功能完成时,我需要运行另外两个功能:

function ordenarData(formUrl){
  
  var ss = SpreadsheetApp.openById(globalVariables().spreadsheetId);
  var sheetNameArray = [];
  var sheets = ss.getSheets();
   
  for (var i = 0; i < sheets.length; i++) {
    sheetNameArray.push(sheets[i].getName());
  }
  
 var ordenado = sheetNameArray.sort();
    
  for( var j = 0; j < sheets.length; j++ ) {
    ss.setActiveSheet(ss.getSheetByName(sheetNameArray[j]));
    ss.moveActiveSheet(j + 1);
    
  var last_element = sheetNameArray[sheetNameArray.length - 1];
  Logger.log(last_element);
  }
  
 completarData(formUrl,last_element);
  
}

function completarData(formUrl,last_element){
  var ss = SpreadsheetApp.openById(globalVariables().spreadsheetId);
  var hojaData = ss.getSheetByName("Data")
  var celdaNEv = "=COUNT(\'"+ last_element + "\'\!\A\:\A\)";
  var celdaSatisf = "=IFERROR((AVERAGE(\'"+ last_element +"\'\!\C\:\C)/10);0)"; 
  var celdaPEv = '=IFERROR(O'+ hojaData.getLastRow() +'/N' + hojaData.getLastRow() +';0)';
  var celdaPAs = '=IFERROR(N'+hojaData.getLastRow()+'/M'+hojaData.getLastRow()+';0)';
  var celdaForm = "<a href=" + formUrl + " target='_blank' class='btn btn-primary btn-xs'><i class='fas fa-file-alt'></i></a>";
  var celdaTh = '=IFERROR(ROUND(L'+hojaData.getLastRow()+'*N'+hojaData.getLastRow()+'; 0);0)';
  var celdaMhr = '=IFERROR(ROUND(T'+hojaData.getLastRow()+'/M'+hojaData.getLastRow()+'; 2);0)';
  
  var formulas = [
  [celdaNEv, celdaSatisf, celdaPEv, celdaPAs, celdaForm, celdaTh, celdaMhr]
        ];
  
  var formatos = [
  ["###", "0.00%", "0.00%", "0.00%", "", "####", "0.00"]
        ];
        
  var cell = hojaData.getRange("O"+hojaData.getLastRow()+":U"+hojaData.getLastRow()+"").setNumberFormats(formatos);
  cell.setValues(formulas);

}

如您所见,第一个函数生成一个GForm并将目标设置为现有的表单。然后,我想用ordenarData()订购工作表并获得最后一个标签的名称。我的问题是,如果指向第二个功能的链接processForm()会同时运行,并且没有时间生成新标签,那么该功能将无法正常工作。

如何设置功能ordenarData()仅在processForm()完成后才运行?

如果您知道用其他任何方法来获取由FormApp.create().setDestination生成的Tab的名称,那么对我来说也可以。

1 个答案:

答案 0 :(得分:1)

解决!

SpreadsheetApp.flush()对我来说很好:getSheets() Google Apps Script multiple calls issue