Excel调用BGG XML API遇问题:MAX函数报错及数值显示异常求助
解决Excel调用BGG XML API的两个问题
嘿,我来帮你搞定这两个困扰你的问题!咱们一个个来:
1. 用MAX函数找出投票数最多的语言依赖选项
你之前的公式只能获取单个选项的投票数,要找到票数最高的选项,得先把所有投票数和对应的选项文本都提取出来,再匹配最大值对应的选项。这里给你两种方案:
方案一:用XLOOKUP(Excel 365/2021及以上版本)
直接用XLOOKUP匹配最大值对应的选项文本:
=XLOOKUP( MAX(FILTERXML(WEBSERVICE("https://www.boardgamegeek.com/xmlapi2/thing?id=230802&stats=1"),"//item/poll[@name='language_dependence']/results/result/@numvotes")), FILTERXML(WEBSERVICE("https://www.boardgamegeek.com/xmlapi2/thing?id=230802&stats=1"),"//item/poll[@name='language_dependence']/results/result/@numvotes"), FILTERXML(WEBSERVICE("https://www.boardgamegeek.com/xmlapi2/thing?id=230802&stats=1"),"//item/poll[@name='language_dependence']/results/result/@value") )
如果觉得重复调用WEBSERVICE太麻烦,可以先把API返回的XML存到一个单元格(比如A1),用=WEBSERVICE("https://www.boardgamegeek.com/xmlapi2/thing?id=230802&stats=1"),然后公式里引用A1:
=XLOOKUP( MAX(FILTERXML(A1,"//item/poll[@name='language_dependence']/results/result/@numvotes")), FILTERXML(A1,"//item/poll[@name='language_dependence']/results/result/@numvotes"), FILTERXML(A1,"//item/poll[@name='language_dependence']/results/result/@value") )
方案二:用INDEX+MATCH(兼容旧版Excel)
如果你的Excel版本不支持XLOOKUP,就用INDEX和MATCH组合:
=INDEX( FILTERXML(A1,"//item/poll[@name='language_dependence']/results/result/@value"), MATCH(MAX(FILTERXML(A1,"//item/poll[@name='language_dependence']/results/result/@numvotes")),FILTERXML(A1,"//item/poll[@name='language_dependence']/results/result/@numvotes"),0) )
注意:旧版Excel需要按Ctrl+Shift+Enter作为数组公式输入,新版Excel会自动处理数组溢出。
2. 带小数的数值显示为整数的问题
这个问题是因为FILTERXML返回的是文本格式的数值,Excel有时候不会自动识别成小数,咱们只需要强制转换为数值格式就行:
方法一:用VALUE函数转换
=VALUE(FILTERXML(WEBSERVICE("https://www.boardgamegeek.com/xmlapi2/thing?id=230802&stats=1"),"//item/statistics/ratings/averageweight/@value"))
方法二:用算术运算强制转换
更简单的方式是给返回值乘1或者加0,自动触发数值转换:
=FILTERXML(WEBSERVICE("https://www.boardgamegeek.com/xmlapi2/thing?id=230802&stats=1"),"//item/statistics/ratings/averageweight/@value")*1
转换后,Excel就能正确显示小数了,比如你说的averageweight会显示成类似2.67这样的数值。
内容的提问来源于stack exchange,提问作者David Owen
相关产品推荐
相关产品推荐

