Google apps script Google应用程序脚本:调用的函数在主函数完成之前执行
我注意到,从主函数内部调用的辅助函数试图在主函数完成之前执行 为了便于理解,我将绘制所需的流程图 如图所示,脚本正在尝试执行步骤3,但由于某些原因,它还没有完成将信息发送到第二张工作表的工作,因此被压碎 步骤1的代码:Google apps script Google应用程序脚本:调用的函数在主函数完成之前执行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我注意到,从主函数内部调用的辅助函数试图在主函数完成之前执行 为了便于理解,我将绘制所需的流程图 如图所示,脚本正在尝试执行步骤3,但由于某些原因,它还没有完成将信息发送到第二张工作表的工作,因此被压碎 步骤1的代码: function GrabarVenta(){ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var spsheet_destino = SpreadsheetApp.openById("1WudWsw
function GrabarVenta(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spsheet_destino = SpreadsheetApp.openById("1WudWswy8xWF02jahGILZxEGWcBK4kKcN1xz6cWCNrzs");
var origen = spreadsheet.getSheetByName("BackEndVentaCxC"); //Origin of information
var soporte = spreadsheet.getSheetByName("BackEndPAX"); //support sheet for some variables..
var ventas_destino = spsheet_destino.getSheetByName("Tb_Venta"); //Destination Sheet
//Va a la hoja de Ventas de Central
var fila_destino = soporte.getRange("Q3").getValue(); //We grab where we are going to put the data (row)
var valores_venta_1 = origen.getRange("B3:Q3").getValues(); //We grab the values we wanna send, part 1
var valores_venta_2 = origen.getRange("R3").getValue(); //We grab the values we wanna send, part 2
ventas_destino.getRange(fila_destino, 2, 1, 16).setValues(valores_venta_1); //We set the values part 1
ventas_destino.getRange(fila_destino, 23, 1, 1).setValue(valores_venta_2); //We set the values part 2
//Other setting for another function, not important
var fila_destino_facturacion = soporte.getRange("U1").getValue();
var destino_fact_row = (fila_destino_facturacion - 1) * 15 + 3;
ventas_destino.getRange(fila_destino, 21).setValue(destino_fact_row);
//We finished setting the data in Sheet 2
//Now we call the second function that will have as input the data we sent to Sheet 2
GrabarMargen();
}
GrabarMargen()是一个函数,它的功能类似于GrabarVenta()。它还将信息发送到第二个电子表格(但发送到另一个工作表)。我不认为这是问题的一部分,但代码如下:
function GrabarMargen(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spsheet_destino = SpreadsheetApp.openById("1WudWswy8xWF02jahGILZxEGWcBK4kKcN1xz6cWCNrzs");
var origen = spreadsheet.getSheetByName("BackEndVentaCxC");
var soporte = spreadsheet.getSheetByName("BackEndPAX");
var margen_destino = spsheet_destino.getSheetByName("Tb_Margen");
var fila_destino = soporte.getRange("Q6").getValue();
var margen_valores = origen.getRange("B16:AC16").getValues(); //Grabs values
margen_destino.getRange(fila_destino, 2, 1, 28).setValues(margen_valores); //Set valuesto Sheet 2
//Calls next Function
PrepararEnviar(); //HERE IS THE PROBLEM
LimpiarNuevaVenta();
IrEnviar();
}
完成后,它将调用PrepareAnViar,它将使用第二个电子表格中的数据
function PrepararEnviar(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var origen = spreadsheet.getSheetByName("Pasajeros");
var apoyo = spreadsheet.getSheetByName("BE_Enviar");
var destino = spreadsheet.getSheetByName("Enviar");
//The data called from SpreadSheet2 is set in C5:C9
//We check that the data is there
var validar_valores = apoyo.getRange("C5:C9").getValues();
for(var i = 0; i < validar_valores.length; i++){
while (validar_valores[i] == "#N/A") {
Logger.log(i + "aún es NA");
Utilities.sleep(200);
}
}
CargarEmail();
}
函数PrepararEnviar(){
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var origen=spreadsheet.getSheetByName(“Pasajeros”);
var apoyo=spreadsheet.getSheetByName(“BE_Enviar”);
var destino=spreadsheet.getSheetByName(“Enviar”);
//从电子表格2中调用的数据在C5:C9中设置
//我们检查数据是否存在
var validar_valores=apoyo.getRange(“C5:C9”).getValues();
对于(变量i=0;i
执行脚本后,我注意到在执行这些函数之前,数据不会保存到电子表格2中。
但由于没有数据可供使用,此函数将失败
知道为什么会这样吗?
我认为代码将按照编写的顺序执行。我甚至尝试在那里放置一些日志来测试这一点,看起来是这样的,但为什么它不在执行其余部分之前设置SP2中的值呢?尝试在步骤之间使用SpreadsheetApp.flush()
尝试在步骤之间使用SpreadsheetApp.flush() 这就成功了:)我们每天都学到新东西。谢谢同样,这个答案也有很多关于flush如何工作的细节,这就是诀窍:)每天我们都会学到新的东西。谢谢这个答案也有很多关于flush如何工作的细节~