0

我从谷歌应用脚​​本编写了一个自定义函数。它应该从单元格内部获取值并打印 JSON 数据。它成功地在后端工作。但是,我不能从前端输入任何内容。

=STOCKC(AMD)

这是我想在谷歌表格中制作的自定义功能。它应该从 JSON 数据中提取数据。

    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;
}

logger.log(closepriear) 显示我想要的数据,但前端不会打印。

我明白了

参考不存在

前端出错。

这是关闭的 Logger.log() 数据。这是我做后端测试时得到的。这是一长串数据,包括以下内容。

[19-07-13 15:52:55:823 PDT] [{close=33.2100}, {close=31.5000}, {close=30.3700}, {close=29.1000}, {close=30.3600}, {close=32.4100}, {close=27.4100}, {close=26.4400}, {close=27.5000}, {close=27.9600}, {close=28.2200}, {close=27.8800}, {close=27.6800}, {close=27.8500}, {close=28.9800}, {close=25.5200}, {close=26.3700}, {close=23.2900}, 
4

2 回答 2

2

问题

要了解自定义函数粘贴值时发生的情况,您可以参考该类的setValues()方法文档Range(Google Sheets API for apps script),它的工作方式几乎相同 - 当您从函数返回值时,它们会被解释像这样的二维Array(单个值的解释与 相同setValue()):

//pseudo-code; [ row1: [col1,colN], rowN: [col1,colN] ]

解决方案

  1. Array将您的元素重新格式化为[33.2100](如果您只需要值);
  2. 在输出之前使用JSON.stringify()您的对象(如果需要保留 obj);

有用的链接

  1. setValue()方法参考
  2. setValues()方法参考
于 2019-07-13T23:35:31.237 回答
1

问题#1:

AMD在前端不存在。这是一个#REF错误(参考不存在),因为AMD没有定义。如果AMD是纯字符串文字而不是命名范围,则需要引用它,就像在 JavaScript 中所做的那样。

=STOCKC("AMD")    

问题#2:

返回变量closepricear是一个对象数组。JSON.stringify(closepricear)您需要使用或 2D 数组返回单个值:

closepricear.push([stockdata[help][helpVal][close]])
于 2019-07-13T21:34:22.147 回答