我已经设置了一个脚本,可以将数据从JSON API提取到Google表格中。我通过添加第三个参数来刷新它,该参数在API调用中未使用,但链接到另一个脚本将当前时间添加到的单元格。这样可以确保定期调用API。
然后我们将使用此Google表格将数据输入到Google Ads。
这一切似乎都能正常运行,但是,当工作表关闭了一段时间(例如整夜)并且Google Ads尝试从工作表进行更新时,它会导入#NAME吗?而不是正确的API值。
我已经设置了另一个脚本,该脚本定期记录API值。这似乎正确记录了这些值,表明关闭工作表时API调用正在工作。
// Make a POST request with a JSON payload.
// Datetime parameter isn't use in API call but is used to refresh data
function TheLottAPI(game,attribute,datetime) {
var data = {
'CompanyId': 'GoldenCasket',
'MaxDrawCount': 1,
'OptionalProductFilter': [game]};
Logger.log(data);
var options = {
'method' : 'post',
'contentType': 'application/json',
// Convert the JavaScript object to a JSON string.
'payload' : JSON.stringify(data)};
var response = UrlFetchApp.fetch('https://data.api.thelott.com/sales/vmax/web/data/lotto/opendraws', options);
Logger.log('output: '+ response);
// Convert JSON response into list
var json = JSON.parse(response)
var drawList=json ["Draws"];
// Extract attribute from list
for(var i=0;i<drawList.length;i++)
{var value=drawList[i][attribute];}
Logger.log(value)
return value;
SpreadsheetApp.flush();
};
// Set date & time to refresh API call
function RefreshTime() {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attributes").getRange("K4").setValue(new Date().toTimeString());
}
应该显示来自API的正确数值,而不是#NAME?错误。
我已经通过使用另一个脚本复制当前值来检查API调用是否正常运行。该API将在一夜之间的适当时间更新。
function RecordDraws() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Draw Amounts");
var source = sheet.getRange("A3:D3");
var values = source.getValues();
values[0];
sheet.appendRow(values[0]);
};
答案 0 :(得分:0)
这是我的猜测
使用Google Sheets UI打开电子表格时,将加载Google Sheets自定义函数定义,然后计算公式,并且由于已经定义了自定义函数,因此可以正确计算它们。如果未以这种方式打开电子表格,则不会加载自定义功能定义,因此电子表格不知道该使用该功能做什么并返回#NAME?
如果您已经在运行更新某些值的脚本,请对该脚本进行增强以执行符合您的自定义功能的计算。
答案 1 :(得分:0)
尝试将其转换
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attributes").getRange("K4").setValue(new Date().toTimeString());
对此:
SpreadsheetApp.openById("id").getSheetByName("Attributes").getRange("K4").setValue(new Date().toTimeString());
因为关闭电子表格或从API调用该方法时,我认为没有“活动表格”。