sta*_*ire 12 excel vba json google-sheets google-apps-script
我将有数百个单元,它们将使用 Web 服务调用来获取股票数据。但是,数据仅以 JSON 或 CSV 格式返回。举一个例子,我怎样才能从每个动态 JSON 或 CSV 字符串中仅获取“uHigh”值,给出下面的示例并知道数字值的长度每次都可能不同?
[{"date":"2020-01-22","uClose":1485.95,"uOpen":1491,"uHigh":1503.21,"uLow":1484.93,"uVolume":1610846,"close":1485.95,"open":1491,"high":1503.21,"low":1484.93,"volume":1610846,"change":1.55,"changePercent":0.1044,"label":"Jan 22","changeOverTime":0.001044}]
Run Code Online (Sandbox Code Playgroud)
或者我可以解析 CSV,例如
"date,uClose,uOpen,uHigh,uLow,uVolume,close,open,high,low,volume,change,changePercent,label,changeOverTime,symbol
2020-01-22,1485.95,1491,1503.21,1484.93,1610846,1485.95,1491,1503.21,1484.93,1610846,1.55,0.1044,Jan 22,0.001044,GOOG"
Run Code Online (Sandbox Code Playgroud)
Excel 提供了一种 FILTERXML 方法,但据我所知,没有用于 JSON 或 CSV 的方法,那么我可以在“=something-here”单元格值中放入什么来仅解析出 uHigh 值?
如果有帮助的话我会使用 Google Sheets。
如果你想从Google Sheets 中的JSON 中提取,你可以REGEXEXTRACT这样使用:
A1B1C1:=REGEXEXTRACT(A1, """" & B1 & """ *: *(.*?),")您可以通过更改 中的查找键来测试它B1。
如果你想从 CSV 中提取,你可以使用这个:
A1B1C1:=VLOOKUP(B1, TRANSPOSE(ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(A1, char(10))), ","))), 2, FALSE)您可以通过更改 中的查找键来测试它B1。
免责声明:只有当 JSON/CSV 是有效/标准格式时,这两种方法才有效。需要注意以下几点:
{"key" : "value, value"}。如果您想从Excel 中的JSON 中提取数据,您可以混合使用SEARCH、FIND、 和 ,MID如下所示:
A1B1C1:=TRIM(MID(A2,FIND(":", A2, FIND(""""&B2&"""", A2))+1,SEARCH(",",A2,FIND(":", A2, FIND(""""&B2&"""", A2)))-FIND(":", A2, FIND(""""&B2&"""", A2))-1))提取“uHigh”字样后的值
将JSON format类型数据放入A2
在 中B2,输入公式:
=LOOKUP(9^9,0+MID(A2,SEARCH("uHigh",A2)+7,ROW($1:$99)))
Run Code Online (Sandbox Code Playgroud)
我了解到可以对 CSV 字符串使用 Split,然后按数字从结果字符串数组中提取所需的项目。这已被另一个人实现,如下所示:
当然,如果能通过一次更简单的调用来完成这一任务,那就太好了。
| 归档时间: |
|
| 查看次数: |
29049 次 |
| 最近记录: |