hip*_*ail 7 import macros api json libreoffice-calc
我找到了一个 Web API 资源,我想从 LibreOffice Calc 访问该资源。
它返回一个简单的 JSON/JavaScript 对象,该对象基本上只是一些名称值对,我想取出其中之一并将其放入单元格中。
我知道编程,但几乎没有使用过电子表格。通过谷歌搜索,我仍然无法判断应该使用哪种编程语言,以及是否需要任何外部插件或仅需要 LibreOffice 内置的功能。
(如果我确定这个问题确实属于 StackOverflow,我很乐意将其迁移到 StackOverflow。)
4年过去了,他们仍然没有实施建议FILTERJSON()。
这显然不是一个真正的解决方案,但目前适用于非常简单的情况:
=WEBSERVICE("http://example.com/v1/stuff")例如。细胞A1=MID(A1;SEARCH("rootProperty";A1)+2;10)(请记住更改分隔符(在我的例子中为分号)以匹配您在 LibreOffice 中的区域设置)解释:
MID()将从完整响应中获取部分文本SEARCH()将查找给定文本的开始索引,例如。“根属性”+2是开始读取值的偏移量(基本上是子字符串)10是从找到的文本开头读取多少个字符SEARCH()(在+2偏移之后)例如,如果您在单元格 A1 中收到以下响应:
{
"id": 12345678,
"something": "Example",
"myThing": "Hello",
"another": "Not needed"
}
Run Code Online (Sandbox Code Playgroud)
单元格 A2 的公式为:=MID(A1;SEARCH("myThing";A1);13)
该单元格的值是:myThing": "He
这是从您在 中搜索的13第一个字符开始的字符。myThingSEARCH()
所以显然你不想参与myThing": "其中。Hello要仅获取的值myThing,您可以使用以下公式:=MID(A1;SEARCH("myThing";A1)+11;5)。
这会:
myThing开始位置(注意:如果字符串有两个实例,您将得到第一个)myThi11然后从索引(+11公式中的)开始偏移myThing": ") 并从那里返回 5 个字符,即Hello当然,它仍然是相当手动的,但至少是一种简单的可行方法。祝你好运!
小智 4
我发现最简单的方法是使用 LibreOffice 的 GetRest 插件。
您可以使用单独的单元格,一个用于提取数据,一个用于格式化数据,等等。但是,通过组合函数(或创建宏),您可以在单个单元格中实现相当多的格式设置。
为此,我将使用 Coinbase API,它们的许多调用不需要身份验证。
GET()它接受 API 端点作为参数PARSEJSON()它接受两个参数:
GET()输出。HTTP请求
GET https://api.coinbase.com/v2/prices/:currency_pair/spot
Run Code Online (Sandbox Code Playgroud)
对于货币对,我想要以美元为单位的 BTC 值,因此将替换为BTC-USD
JSON 响应
GET https://api.coinbase.com/v2/prices/:currency_pair/spot
Run Code Online (Sandbox Code Playgroud)
在A1中:
=GET("https://api.coinbase.com/v2/prices/BTC-USD/spot")
Run Code Online (Sandbox Code Playgroud)
在 A2 中,解析 JSON 响应。解析在对象名称级别进行,并用句点分隔。它以两种方式之一作为参数传递到函数中,如果 JSON 包含数组,我们将数组的名称和对象索引指定为arrayName.get(i).objectName。我们的示例只是一个具有两"key":"value"对的对象,因此格式为objectName.keyName:
=PARSEJSON(A1, "data.amount")
Run Code Online (Sandbox Code Playgroud)
内容如下:
23966.93
Run Code Online (Sandbox Code Playgroud)
方法本质上是相同的,但是我们不是将单元格作为第一个参数传递,而是传递整个GET()函数:
=PARSEJSON(GET("https://api.coinbase.com/v2/prices/BTC-USD/spot"), "data.amount")
Run Code Online (Sandbox Code Playgroud)
JSON 响应传递一个字符串值,该值包装在一个函数中,因此您无法使用该单元格中的任何选项来格式化它的货币或数字。
不过,我仍然希望在电子表格中在其前面添加“$”,因此我们可以连接字符串来添加此前缀,我们的结果函数如下所示:
=CONCAT("$",PARSEJSON(GET("https://api.coinbase.com/v2/prices/BTC-USD/spot"), "data.amount"))
Run Code Online (Sandbox Code Playgroud)
这适合一次单元,可以通过按 F9 进行更新(请注意,每次刷新开放 API 端点都会占用一些服务器带宽,因此请尝试限制刷新量。如果您可以重复使用单元而无需创建另一个调用,那就更贴心了。)
| 归档时间: |
|
| 查看次数: |
5205 次 |
| 最近记录: |