我有一个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的名称,那么对我来说也可以。
答案 0 :(得分:1)
解决!
SpreadsheetApp.flush()
对我来说很好:getSheets() Google Apps Script multiple calls issue