gpt4 book ai didi

javascript - Google 表格脚本函数 UrlFetchApp.fetch 不是从 .onEdit(e) 运行,而是从编辑器运行

转载 作者:行者123 更新时间:2023-11-30 19:34:37 35 4
gpt4 key购买 nike

我创建了一个包含大量沙滩 Volley 杯信息的 Google 工作表,我想在选中此工作表中的复选框时调用我创建的 API。

function onEdit(e){
const ui = SpreadsheetApp.getUi();
const spreadsheets = SpreadsheetApp.getActive();
const configSheet = spreadsheets.getSheetByName("Config")
var tourneyId = String(configSheet.getRange(2,4).getValue())
var tourneyTitle = String(configSheet.getRange(2,5).getValue())
var sheet = spreadsheets.getActiveSheet()
if (sheet.getName() == "LiveScore"){
var actRng = sheet.getActiveRange();
var editColumn = actRng.getColumn();
var rowIndex = actRng.getRowIndex();
actRng = actRng.getCell(1, 1);
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
if(editColumn == 7 && rowIndex != 1){
onStartBroadcastClicked(actRng, ui, sheet, rowIndex, editColumn, tourneyTitle);
}
}
}

在我看来,这部分从来没有任何问题。但是当我进入 onStartBroadcastClicked 函数时:

function onStartBroadcastClicked(actRng, ui, sheet, rowIndex, editColumn, tourneyTitle){
var homeTeam = String(sheet.getRange(rowIndex, 14).getValue());
... // more setting variables
var endTime = new Date(startTime.getTime() + MILLIS_PER_MATCH);

if(actRng.isChecked()){
var response = ui.alert("You are about to start a new broadcast. Are you sure?" +
"\n Title: " + title, ui.ButtonSet.YES_NO);
if (response == ui.Button.YES) {
var httpRequest = "https://someUrl";
var options =
{
'method':'POST',
'contentType': 'application/json',
'payload' : JSON.stringify({
"title" : title,
... // setting all variables
"description" : description
}),
'muteHttpExceptions' : true,
'headers' : {
"Authorization": "Basic " + Utilities.base64Encode(USERNAME + ":" + PASSWORD)
}
};

ui.alert("Waiting.......")
var result = UrlFetchApp.fetch(httpRequest, options);
ui.alert(result.getContentText())

问题是它总是到达 ui.alert("Waiting.........") 行,但是当从复选框触发时,它永远不会成功 http POST 请求.如果我在编辑器中单击播放,它会成功,并且我会在警报框中收到响应。

可能是超时或某些自动保存问题?有谁知道在哪里继续寻找?我已经被困在这里一段时间了,如果有人能指出我正确的方向,我会很高兴。

最佳答案

你的问题修改点是使用OnEdit事件的installable trigger。当需要授权的方法在simple trigger中使用时,会报错。这种情况让我们认为脚本似乎不起作用。

为了避免这个错误,请使用OnEdit事件触发器的可安装触发器。

重要的一点是,在安装触发器之前,请将 onEdit() 的函数名称重命名为其他名称。并将重命名的函数名称安装为 OnEdit 事件触发器。这样就可以避免 onEdit() 的重复运行。如果 onEdit() 函数被安装为可安装的触发器,当一个单元格被编辑时,该函数将运行 2 次。 Ref .

通过上述设置,当编辑单元格时,UrlFetchApp.fetch() 起作用。

引用资料:

关于javascript - Google 表格脚本函数 UrlFetchApp.fetch 不是从 .onEdit(e) 运行,而是从编辑器运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56073360/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com