我有一个API。
我只想要"音量"值。
在Excel 2013中,我使用了
=FILTERXML(WEBSERVICE(API ADDRESS),"//row/@volume")
但我收到#VALUE!
错误。
有人能指出我做错了吗?
问题:
当我把这个公式放在:
=FILTERXML(WEBSERVICE("http://eve-marketdata.com/api/item_history2.xml?char_name=demo®ion_ids=10000002&type_ids=33468&days=2"), "//emd/result/rowset/row/@volume")
我得到了#VALUES!我认为问题来自于webservice函数本身,因为当我输入这个公式时:
=WEBSERVICE(http://eve-marketdata.com/api/item_history2.xml?char_name=demo®ion_ids=10000002&type_ids=33468&days=2)
我也得到了#VALUE!你知道问题是什么吗?
答案 0 :(得分:1)
您需要微调您的Xpath查询。看一下Web服务返回的XML:
<?xml version="1.0" encoding="utf-8"?>
<emd version="2">
<currentTime>2016-01-29 13:37:47</currentTime>
<result>
<rowset name="history" key="typeID,regionID,date" columns="typeID,regionID,date,lowPrice,highPrice,avgPrice,volume,orders">
<row typeID="33468" regionID="10000002" date="2016-01-28" lowPrice="74500000.06" highPrice="76300002.15" avgPrice="76248999.69" volume="279" orders="219"/>
<row typeID="33468" regionID="10000002" date="2016-01-29" lowPrice="74000000.89" highPrice="80449888.7" avgPrice="75000104.61" volume="101" orders="68"/>
</rowset>
</result>
</emd>
您的Xpath查询需要在完整路径中将您从文档的根目录转移到您感兴趣的值,因此您需要:
//emd/result/rowset/row/@volume
总而言之,你的公式应该是:
=FILTERXML(WEBSERVICE("http://eve-marketdata.com/api/item_history2.xml?char_name=demo®ion_ids=10000002&type_ids=33468&days=2"), "//emd/result/rowset/row/@volume")
它给出了279的结果 - 因为它只取第一个值。
要获取这两个值,您需要多次调用FILTERXML
函数,并调整Xpath以将其考虑在内。如果你这样做,我建议将WEBSERVICE
的呼叫转移到它自己的小区。
因此,您的最终结果可能类似于:
=WEBSERVICE("http://eve-marketdata.com/api/item_history2.xml?char_name=demo®ion_ids=10000002&type_ids=33468&days=2")
=FILTERXML(A1, "//emd/result/rowset/row[position()=1]/@volume")
=FILTERXML(A1, "//emd/result/rowset/row[position()=2]/@volume")
请注意position()
由于某种原因从1开始计数。