前提是将当前货币汇率检索到 Libre/OpenOffice Calc 电子表格中。以前我使用 JSON 服务来做到这一点,手动调整子字符串,这不是那么方便用户。所以我想找出如何使用 Libre/OpenOffice 中的本机函数来完成它。
服务:https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml返回如下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time='2021-03-23'>
<Cube currency='USD' rate='1.1883'/>
<Cube currency='JPY' rate='128.99'/>
<Cube currency='BGN' rate='1.9558'/>
<Cube currency='CZK' rate='26.198'/>
<Cube currency='DKK' rate='7.4360'/>
<Cube currency='GBP' rate='0.86198'/>
<Cube currency='HUF' rate='366.51'/>
<Cube currency='PLN' rate='4.6191'/>
<Cube currency='RON' rate='4.8893'/>
<Cube currency='SEK' rate='10.1813'/>
<Cube currency='CHF' rate='1.1066'/>
<Cube currency='ISK' rate='148.30'/>
<Cube currency='NOK' rate='10.1783'/>
<Cube currency='HRK' rate='7.5755'/>
<Cube currency='RUB' rate='90.2781'/>
<Cube currency='TRY' rate='9.3638'/>
<Cube currency='AUD' rate='1.5491'/>
<Cube currency='BRL' rate='6.5562'/>
<Cube currency='CAD' rate='1.4938'/>
<Cube currency='CNY' rate='7.7367'/>
<Cube currency='HKD' rate='9.2290'/>
<Cube currency='IDR' rate='17105.58'/>
<Cube currency='ILS' rate='3.9099'/>
<Cube currency='INR' rate='86.1025'/>
<Cube currency='KRW' rate='1342.48'/>
<Cube currency='MXN' rate='24.5926'/>
<Cube currency='MYR' rate='4.8988'/>
<Cube currency='NZD' rate='1.6918'/>
<Cube currency='PHP' rate='57.779'/>
<Cube currency='SGD' rate='1.5955'/>
<Cube currency='THB' rate='36.819'/>
<Cube currency='ZAR' rate='17.5818'/>
</Cube>
</Cube>
</gesmes:Envelope>
答案1
特别这样做的原因是,我认为这种用例非常常见,并且欧洲中央银行数据是利率的官方来源(因此很受欢迎),所以这应该对很多人有帮助。
您可以组合使用两个内置函数来检索数据,而无需手动编辑子字符串长度(我以前的解决方案:https://superuser.com/a/1599638/174037)。
WEBSERVICE
显然,为了检索数据FILTERXML
解析 XML 输入的数据(本例中为欧洲中央银行 XML)
因此,要解析原始 XML 中的数据,您可以使用:
- 单元格 A1 包含字符串值
USD
- 单元格 A3 包含 XML 的 URL:https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
- 单元格 B1 中的公式为:
=FILTERXML(WEBSERVICE($A$3);"//*[local-name()='Cube' and @currency='" & A1 & "']/@rate")
MID
现在,无论当前长度如何,B1 都将包含实际值,因此当货币汇率从例如变为时,您无需手动编辑“子1.2325
字符串”1.23
对于xpath的解释("//*[local-name()='Cube' and @currency='" & A1 & "']/@rate"
上面的部分):
- 它查找名为 的“任何” XML 元素
<Cube>
,其中该元素还具有名为 的属性,currency
该属性与单元格 A1 中定义的值相匹配(USD
在此示例中) - 然后它“获取”该结果中属性的值
rate
,在本例中是与欧元相比的货币比率(<Cube currency='USD' rate='1.1883'/>
目前)
因此现在单元格 B1 将具有字符串值1.1883
。根据您的语言环境,您可能还想将其转换为逗号而不是句点以表示小数,例如在单元格 C1 中:=VALUE(SUBSTITUTE(B1;".";","))
。也许在单元格 D1 中将货币汇率反过来:=1/C1