You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets中用IMPORTXML XPath查询格式化XML为可读表格数据

解决方案

问题原因说明

  • 之前使用|联合查询的方式,返回的是所有匹配节点按文档顺序排列的一维数组,因此每个值单独占一行
  • XPath 1.0中的concat函数默认只对第一个匹配的节点执行拼接操作,因此只能返回单条记录

方案1(推荐,适配新版Google Sheets)

通过LET+WRAPROWS组合重塑数组结构,再拼接日期字段,公式可直接复制使用:

=ARRAYFORMULA(LET(raw_data, IMPORTXML("https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml", "//data/campaignId | //data/campaignName | //data/startDate/year | //data/startDate/month | //data/startDate/day | //data/endDate/year | //data/endDate/month | //data/endDate/day"), row_data, WRAPROWS(raw_data, 8), {INDEX(row_data,,1),INDEX(row_data,,2),INDEX(row_data,,3)&"/"&INDEX(row_data,,4)&"/"&INDEX(row_data,,5),INDEX(row_data,,6)&"/"&INDEX(row_data,,7)&"/"&INDEX(row_data,,8)}))

公式逻辑:先按顺序提取所有需要的节点值(单条记录对应8个字段:活动ID、活动名称、开始年、开始月、开始日、结束年、结束月、结束日),再把一维数组按8个值一行的规则转为二维数组,最后拼接日期字段输出四列结果,刚好匹配需求。


方案2(适配旧版Google Sheets)

如果你的Google Sheets版本不支持LET和WRAPROWS函数,可以用遍历节点下标的方式实现:

=ARRAYFORMULA(IFERROR(LET(total, COUNTA(IMPORTXML("https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml", "//data/campaignId")), idx, SEQUENCE(total), {IMPORTXML("https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml", "//data["&idx&"]/campaignId"),IMPORTXML("https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml", "//data["&idx&"]/campaignName"),IMPORTXML("https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml", "concat(//data["&idx&"]/startDate/year,'/',//data["&idx&"]/startDate/month,'/',//data["&idx&"]/startDate/day)"),IMPORTXML("https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml", "concat(//data["&idx&"]/endDate/year,'/',//data["&idx&"]/endDate/month,'/',//data["&idx&"]/endDate/day)")})))

公式逻辑:先统计总记录数,再通过序列生成每条记录的下标,逐个查询对应下标的节点内容,直接用XPath的concat拼接日期字段。


内容的提问来源于stack exchange,提问作者Nowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:24:04