【发布时间】:2019-10-18 09:51:40
【问题描述】:
我需要从 CEX.IO 获取 OHLC 数据并放入必要的单元格中的对名称下。 为此,我在 Google 电子表格中有一些简单的自定义函数,用于从 CEX.IO 检索 OHLC:
function OHLCV_CEXIO_1d(date,pair){
var site = "https://cex.io/api/ohlcv/hd/";
var url = site + date + "/" + pair;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
var result = data.data1d;
return result;
}
当我将 pair 指定为单个单元格(例如,“BTC/USD”或单元格“B1”)时,此脚本运行良好。
但是当我需要将pair 指定为范围时,我会看到“正在加载...”,然后是空单元格。
比如我有这样的表:
A B H N
1 BTC/USD ETH/USD BCH/USD
2 20190712
如果我在=OHLCV_CEXIO_1d("20190712",B1) 中使用公式,一切都会好的。
但如果我尝试像这样使用ARRAYFORMULA:=ARRAYFORMULA(IF(B1:1>0,OHLCV_CEXIO_1d("20190712",B1:1),"")) 我将收到空单元格B2。
据我了解,我需要更改脚本以将输入值识别为数组(或范围?)。
因此,我希望单元格 H2 和 N2 将自动填充为数组
您能否建议如何解决我的问题?
UPD:感谢所有回复链接的人。但我已经把它们和许多其他的都涂红了。 现在我在这里:
function OHLCV_CEXIO_1d(date,pair){
if (date.map) {
return date.map(OHLCV_CEXIO_1d);
} else {
if (pair.map) {
return pair.map(OHLCV_CEXIO_1d);
} else {
var url = "https://cex.io/api/ohlcv/hd/" +date +"/" +pair +"/";
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
var result = data.data1d;
return result;
}
}
}
现在我有了公式:=ARRAYFORMULA(IF(A2:A10>0;IF(B1:1>0;OHLCV_CEXIO_1d(A2:A10; B1:1);"");""))
一切正常,直到var data = JSON.parse(json); 此时我收到一个错误:SyntaxError: Unexpected token: <
有人可以修改我的脚本并帮助解决这个问题吗?提前谢谢!
【问题讨论】:
标签: arrays google-apps-script google-sheets google-sheets-formula custom-function