我正在制作一个工作表,该工作表从 API 中提取数据,然后对其运行计算。由于超时和限制,我需要运行一个脚本,等待计算完成,然后运行另一个脚本。
有没有办法让工作表(或脚本)等待运行一个函数,直到工作表中的单元格显示特定值?(这是我的解决方法)
背景
我为我妻子的夏令营做了一些电子表格工作,他们希望获得营员人数的每日更新。他们的 CRM(campminder)有一个 API,我调用它来获取各种信息:
Get_Key
)Get_Campers
)Get_Camper_Details
)所以操作顺序是:
Get_Key
Get_Key
完全(并成功)执行,然后运行Get_Campers
Get_Campers
完全(并成功)执行,然后在每个camper_id旁边放置一个Get_Camper_Details
公式(IMPORTAPI
函数)。 AFAIK,没有办法批量获取露营者详细信息。Get_Camper_Details
完全(并成功)执行每个露营者,然后将所有详细信息复制到新表并删除IMPORTAPI
公式,这样它们就不会不断重新计算。
有没有办法在 Apps 脚本中执行此操作?
谢谢! JSB
当我观看和等待时,我已经完成了上述所有步骤,可以正常运行,但我很想自动执行此操作 - 理想情况是每天一次(定时),但至少按一下按钮即可运行所有四个步骤按顺序执行步骤。
我还查看了我已经设置了一个计数器来告诉我何时可以安全地运行最终(复制/删除)功能。我可以用它作为最后一个的触发器。
因此,您可以使用名为“stageChecker”的功能或根据您的意愿在分钟计时器上设置一个类似这样的:
function stageChecker() {
// Open the active spreadsheet and get the stage value from a specific cell
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Control"); // Sheet where the stage is stored
var stageCell = sheet.getRange("A1"); // Adjust cell reference
var stage = stageCell.getValue(); // Get the current stage
switch(stage) {
case "Stop":
// Stop the process if the stage is "Stop"
Logger.log("Process stopped.");
return;
case "Get_Key":
// Call the function to get the key
Logger.log("Getting Key...");
getKey(); // Your function to get the key
break;
case "Get_Campers":
// Call the function to get campers
Logger.log("Getting Campers...");
getCampers(); // Your function to get campers
break;
case "Get_Camper_Details":
// Call the function to get camper details
Logger.log("Getting Camper Details...");
getCamperDetails(); // Your function to get camper details
break;
case "Running":
// If the stage says "Running," do nothing (since another function is already executing)
Logger.log("Process is already running.");
return;
default:
Logger.log("Unknown stage: " + stage);
return;
}
}
例如 getKey():
function getKey() {
var sheet = SpreadsheetApp.getActive()
var stageCell = sheet.getRange("A1")
stageCell.setValue("Running")
//The rest of your code
stageCell.setValue("Get_Campers")
}
您可以将最终函数设置为将值更改为“停止”,并且仅再次运行“getKey”一次,其余的将从该阶段开始逐分钟继续。如果清楚的话请告诉我:)