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

使用Google Apps Script解析Google Maps XML数据时遇请求错误

问题修正方案

错误原因拆解

  • URL拼接错误:Google Apps Script基于JavaScript,字符串拼接要用+而非VBA的&,原写法导致URL格式完全失效,触发Bad request错误
  • 语法细节错误:getRange(1,1,)多了多余逗号;getContentText、getValue是方法,必须加()调用才能执行
  • XML解析层级错误:API返回的XML根节点就是<GeocodeResponse>,无需再通过getChild重复获取
  • 节点调用方式错误:获取XML子节点要用getChild()方法,不能直接用函数调用的写法

修正后的完整代码

function addressFormat() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("format");
  // 获取A1单元格的待格式化地址,修正getRange多余逗号
  var rawAddr = sheet.getRange(1, 1).getValue();
  var apiKey = "你的API密钥";
  
  // 编码地址中的特殊字符(空格、中文等),避免URL格式错误
  var encodedAddr = encodeURIComponent(rawAddr);
  // 用+正确拼接URL字符串
  var addUrl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" + encodedAddr + "&key=" + apiKey;
  
  try {
    var extractXml = UrlFetchApp.fetch(addUrl);
    // 调用getContentText方法,补全()
    var contentsXml = extractXml.getContentText();
    var xmlDoc = XmlService.parse(contentsXml);
    // 根节点即为GeocodeResponse
    var root = xmlDoc.getRootElement();
    // 获取第一个匹配的result节点
    var result = root.getChild('result');
    if (result) {
      // 获取formatted_address节点并取值,补全getValue()
      var formattedAddr = result.getChild('formatted_address').getValue();
      // 将结果写入B1单元格(可自行修改目标行列)
      sheet.getRange(1, 2).setValue(formattedAddr);
      return formattedAddr;
    } else {
      sheet.getRange(1, 2).setValue("未找到匹配地址");
      return "未找到匹配地址";
    }
  } catch (e) {
    sheet.getRange(1, 2).setValue("请求错误:" + e.message);
    return "请求错误:" + e.message;
  }
}

关键优化说明

  • 新增地址编码:用encodeURIComponent处理地址中的特殊字符,避免空格、中文等导致URL失效
  • 异常捕获:加入try-catch块,方便排查API请求或解析错误,同时给单元格写入明确提示
  • 空值判断:如果API未返回有效地址结果,给出清晰提示
  • 补充写入逻辑:原代码仅返回结果,新增写入Sheet目标单元格的逻辑,满足“写入另一单元格”的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:25:20