我从google应用脚本中编写了一个自定义函数。它应该从单元格内部获取价值并打印JSON数据。它成功地在后端工作。但是,我不能从前端输入任何信息。
type Data = {
name: string
age: number
}
const data: Data = {
name: 'Jack',
age: 33,
}
function change<K extends keyof Data>(name: K, value: Data[K]): Data[K] {
return data[name] = value
}
change('name', 'Jill') // infers change<'name'>, value: string
change('age', 21) // infers change<'age'>, value: number
这是我要在Google表格中创建的自定义函数。应该从JSON数据中提取数据。
=STOCKC(AMD)
logger.log(closepriear)显示我想要的数据,但前端无法打印。
我知道
参考不存在
前端错误。
这是closepriear Logger.log()数据。这是我进行后端测试时得到的。这是一长串数据,包含以下内容。
function STOCKC(symbol){
//this is the testcase for the backend
//var symbol = "AMD";
symbol = encodeURI(symbol);
var url = "https://www.alphavantage.co/query?function=TIME_SERIES_WEEKLY&symbol="+symbol+"&apikey="+api_key;
var responseUrl = UrlFetchApp.fetch(url);
var response = responseUrl.getContentText();
var stockdata = JSON.parse(response);
var closepricear = new Array();
if(Object.keys(stockdata).length > 1){
var help = Object.keys(stockdata)[1];
for(var i = 0; i < Object.keys(stockdata[help]).length; i++){
var helpVal = Object.keys(stockdata[help])[i];
var open = Object.keys(stockdata[help][helpVal])[0];
var close = Object.keys(stockdata[help][helpVal])[3];
var low = Object.keys(stockdata[help][helpVal])[2];
var volume = Object.keys(stockdata[help][helpVal])[4];
var high = Object.keys(stockdata[help][helpVal])[1];
var date = Object.keys(stockdata[help]);
closepricear.push({"close":stockdata[help][helpVal][close]})
// closepriceard.push(date)
}
}
Logger.log(closepricear);
return closepricear;
}
答案 0 :(得分:2)
问题
要了解自定义函数粘贴值时发生了什么,您可以参考setValues()
类的Range
方法文档(Google Sheets API for apps脚本),其工作原理几乎相同方式-从函数返回值时,它们将被解释为二维Array
,如下所示(单个值的解释与setValue()
相同):
//pseudo-code;
[ row1: [col1,colN], rowN: [col1,colN] ]
解决方案
Array
元素重新设置为[33.2100]
(如果仅需要值); JSON.stringify()
(如果需要保留obj); 有用的链接
答案 1 :(得分:1)
AMD
在前端不存在。这是一个#REF
错误(引用不存在),因为未定义AMD
。如果AMD
是纯字符串文字而不是命名范围,则需要对其进行引用,就像在JavaScript中一样。
=STOCKC("AMD")
返回变量closepricear
是一个对象数组。您需要使用JSON.stringify(closepricear)
或2D数组返回单个值:
closepricear.push([stockdata[help][helpVal][close]])