问题描述
我编写了以下脚本,它可以很好地提取所有数据。但是当我尝试将它分解成不同的单元格时,它什么也不返回。我在这里错过了什么?
function myMonitor() {
//GET KEY
var sh=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“NINFO”);
**var rowNum = sh.getRange(‘F6’).getValue(); **
//POST CALL
** var url = “http://monitor.incognito.org/pubkeystat/stat”; **
** var data = { “mpk”: rowNum**
** };**
** var options = {**
** ‘method’ : ‘post’,**
** ‘contentType’: ‘application/json’,**
** ‘payload’ : JSON.stringify(data)**
** };**
** var response = UrlFetchApp.fetch(url,options);**
** var txt= response.getContentText();**
** var d=JSON.parse(txt);**
//RETURN RESULTS BACK TO GOOGLE SHEET
var sh1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“MONITOR”);
sh1.getRange(1,1).setValue(d);
}
结果:
{Role=PENDING,SyncState=SHARD SYNCING,Alert=true,CommitteeChain=2,NextEventMsg=12 to be COMMITEE,Status=ONLINE}
现在,如果我尝试同样的事情,并将最后一行切换为:
sh1.getRange(1,1).setValue(d.Role);
sh1.getRange(1,2).setValue(d.SyncState);
sh1.getRange(1,3).setValue(d.Alert);
sh1.getRange(1,4).setValue(d.CommitteeChain);
sh1.getRange(1,5).setValue(d.NextEventMsg);
sh1.getRange(1,6).setValue(d.Status);
它完成了它的执行但什么都不返回。有什么想法吗?
解决方法
我测试了您的样本数据,它按预期返回到单独的单元格。但是你能试试这个方法吗?
代码:
Object.keys(d).forEach(function (key,index){
sh1.getRange(1,index + 1).setValue(d[key]);
});
行为:
- 迭代对象 d 的所有键并放置在第一行(每个单元格 1 个值,类似于每个单元格中您的个人
setValue
所做的)
输出:
编辑:
-
d
值似乎在数组中。试试这个:
d.forEach(function (data,row){
Logger.log(data);
Object.keys(data).forEach(function (key,index){
Logger.log(key)
sh.getRange(row + 1,index + 1).setValue(data[key]);
});
});
注意:
-
由于我无法在 fetch 方法上测试实际响应,为了模拟您的数据,我使用了:
var d = {Role:"PENDING",SyncState:"SHARD SYNCING",Alert:true,CommitteeChain:2,NextEventMsg:"12 to be COMMITEE",Status:"ONLINE"};
-
如果您的
,上面的代码应该可以工作d
值为:{Role=PENDING,SyncState=SHARD SYNCING,Alert=true,CommitteeChain=2,NextEventMsg=12 to be COMMITEE,Status=ONLINE}
编辑 2:
- 由于您的响应在一个数组中,您需要像
d[0]
一样访问它 - 下面提供的代码还将添加一个标题,并将循环所有结果(如果有多个数据返回)
代码:
// header
sh.getRange(1,1,Object.keys(d[0]).length).setValues([Object.keys(d[0])]);
// contents
d.forEach(function (data,row){
Object.keys(data).forEach(function (key,index){
sh.getRange(row + 2,index + 1).setValue(data[key]);
});
});