如何在 Google Sheets 中地理编码地址:4 种有效方法

如何在 Google Sheets 中地理编码:CSV、=GEOCODE() 公式、Apps Script 批量处理和反向地理编码。每天 100 行免费。

| April 16, 2026

如果您的 Google Sheets 中有一堆地址,并且需要获取经纬度坐标,那么您来对地方了。无论您是在绘制客户位置地图、规划配送路线还是构建门店定位器,在 Google Sheets 中进行地理编码都是最常见的数据任务之一,但没人教您如何正确操作。

问题在哪里?Google Sheets 没有内置的地理编码功能。没有 =GEOCODE() 公式在等着您。但有四种实用方法可以实现,从零代码到全自动批量处理。

在本指南中,我将向您介绍每种在 Google Sheets 中地理编码地址的方法——从简单的复制粘贴流程到自定义 Apps Script 函数。所有代码示例都是真实可用的,可直接配合 CSV2GEO 平台使用。

让我们开始吧。

谁需要在 Google Sheets 中地理编码地址?

在深入了解各种方法之前,先看看通常哪些人需要这个功能:

📍

营销团队

绘制客户位置地图,用于区域定向营销活动。

🚚

配送运营

将配送地址转换为坐标,用于路线规划。

🏢

房地产机构

对房源列表进行地理编码,用于交互式房产搜索地图。

📊

研究人员

分析来自调查或公共记录的地理数据。

🛒

电子商务

构建门店定位器和计算配送区域。

🏥

医疗健康

绘制患者位置地图,用于可达性分析和设施规划。

共同点?您有一个电子表格中的地址。您需要坐标。而且您不想为 1,000 次查询花费 5 美元。

方法 1:零代码——导出 CSV,上传到 CSV2GEO,粘贴

适用于:任何想要获取坐标而不写一行代码的人。

这是地理编码电子表格最简单的方法。无需 API 密钥,无需脚本,无需技术配置。

步骤 1:将 Google Sheets 导出为 CSV

打开包含地址的 Google Sheets。前往 文件 > 下载 > 逗号分隔值 (.csv)。

确保您的地址数据是干净的。您需要街道、城市、省份、邮政编码和国家等列——或者至少一列包含完整地址。

步骤 2:上传到 CSV2GEO

前往 CSV2GEO,将您的 CSV 文件拖放到上传区域。平台会自动检测您的列:

  • 街道——您的地址列
  • 城市——城市或城镇
  • 省份——省份或地区
  • 邮政编码
  • 国家——国家名称或 ISO 代码

点击处理,CSV2GEO 将使用其包含 200 多个国家的 4.61 亿多个地址的数据库对每行进行地理编码。

步骤 3:下载结果

处理完成后,下载您的地理编码文件。它将包含所有原始列以及:纬度、经度、格式化地址和精度分数。

步骤 4:粘贴到 Google Sheets

在 Google Sheets 中打开下载的 CSV(文件 > 导入),或者直接将纬度和经度列复制到您的原始工作表中。

就这样。无需代码,无需 API 密钥,无需配置免费地理编码提供每天 100 行免费额度。

方法 2:自定义 Apps Script 函数——=GEOCODE(A2)

适用于:希望直接在工作表中获得公式体验的用户。

此方法使用 Google Apps Script 和 CSV2GEO 地理编码 API 创建自定义 =GEOCODE() 函数。

步骤 1:获取您的 API 密钥

前往 CSV2GEO API Keys 生成一个免费密钥。免费套餐包含每天 1,000 次 API 请求

步骤 2:打开 Apps Script 编辑器

在您的 Google Sheets 中,前往 扩展程序 > Apps Script。

步骤 3:添加地理编码函数

删除现有代码并粘贴以下内容:

/**
 * 地理编码一个地址并返回纬度、经度
 * @param {string} address 要地理编码的地址
 * @param {string} country ISO 国家代码(可选,例如:"CN")
 * @return {string} "latitude, longitude"
 * @customfunction
 */
function GEOCODE(address, country) {
  if (!address) return "";
  const API_KEY = "在此输入API密钥";
  const url = "https://api.csv2geo.com/v1/geocode"
    + "?q=" + encodeURIComponent(address)
    + (country ? "&country=" + country : "")
    + "&api_key=" + API_KEY;

  const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
  const data = JSON.parse(response.getContentText());

  if (data.results && data.results.length > 0) {
    const loc = data.results[0].location;
    return loc.lat + ", " + loc.lng;
  }
  return "未找到";
}

步骤 4:在工作表中使用

保存脚本(Ctrl+S),然后返回您的工作表:

=GEOCODE("北京市朝阳区建国门外大街1号", "CN")

返回结果:39.9042, 116.4074

您也可以引用单元格:

=GEOCODE(A2, B2)

其中 A 列包含地址,B 列包含国家代码。

重要提示:自定义函数逐个执行。对于 500 行,每行都会发起一次单独的 API 调用。对于大量数据,请使用方法 3。

方法 3:使用 Apps Script 菜单进行批量地理编码

适用于:高效处理数百或数千个地址。

此方法在您的工作表中添加一个"地理编码"菜单,一键即可对整列进行地理编码。

步骤 1:添加脚本

打开 扩展程序 > Apps Script 并粘贴:

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('地理编码')
    .addItem('地理编码所有地址', 'geocodeAll')
    .addItem('反向地理编码(选中区域)', 'reverseGeocodeSelected')
    .addToUi();
}

function geocodeAll() {
  const API_KEY = "在此输入API密钥";
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();

  for (let row = 2; row <= lastRow; row++) {
    if (sheet.getRange(row, 6).getValue()) continue;
    const address = sheet.getRange(row, 1).getValue();
    const country = sheet.getRange(row, 5).getValue();
    if (!address) continue;

    const url = "https://api.csv2geo.com/v1/geocode"
      + "?q=" + encodeURIComponent(address)
      + (country ? "&country=" + country : "")
      + "&api_key=" + API_KEY;

    try {
      const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
      const data = JSON.parse(response.getContentText());
      if (data.results && data.results.length > 0) {
        const r = data.results[0];
        sheet.getRange(row, 6).setValue(r.location.lat);
        sheet.getRange(row, 7).setValue(r.location.lng);
        sheet.getRange(row, 8).setValue(r.accuracy_score);
      }
    } catch (e) {
      sheet.getRange(row, 6).setValue("错误: " + e.message);
    }
    Utilities.sleep(200);
    if (row % 50 === 0) {
      SpreadsheetApp.getActiveSpreadsheet().toast(
        "已处理 " + row + " / " + lastRow, "地理编码", 3);
    }
  }
  SpreadsheetApp.getActiveSpreadsheet().toast("完成!", "地理编码");
}

步骤 2:整理您的工作表

A (地址)B (城市)C (省份)D (邮编)E (国家)F (纬度)G (经度)H (置信度)
建国门外大街1号北京北京市100004CN自动自动自动

步骤 3:运行地理编码器

刷新您的工作表。一个"地理编码"菜单会出现。点击 地理编码 > 地理编码所有地址。

脚本以 200ms 的间隔处理各行。500 个地址大约需要 2 分钟。

提示:超过 1,000 个地址时,可以分多天处理,或导出为 CSV 使用批量地理编码

方法 4:在 Google Sheets 中进行反向地理编码

适用于:当您已有经纬度坐标并需要获取地址时。

这是正向地理编码的反向操作。您有 GPS 坐标,需要对应的地址。这就是反向地理编码

反向地理编码函数

function REVERSE_GEOCODE(lat, lng) {
  if (!lat || !lng) return "";
  const API_KEY = "在此输入API密钥";
  const url = "https://api.csv2geo.com/v1/reverse"
    + "?lat=" + lat + "&lng=" + lng + "&api_key=" + API_KEY;
  const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
  const data = JSON.parse(response.getContentText());
  if (data.results && data.results.length > 0) return data.results[0].formatted_address;
  return "未找到";
}

用法:

=REVERSE_GEOCODE(39.9042, 116.4074)

返回结果:北京市朝阳区建国门外大街1号, 100004 北京, CN

理解 API 响应

当您调用 CSV2GEO API 时,返回内容如下:

{
  "results": [{
    "formatted_address": "北京市朝阳区建国门外大街1号, 100004 北京, CN",
    "location": { "lat": 39.9042, "lng": 116.4074 },
    "accuracy": "rooftop",
    "accuracy_score": 0.98,
    "components": {
      "house_number": "1",
      "street": "建国门外大街",
      "city": "北京",
      "state": "北京市",
      "postcode": "100004",
      "country": "CN"
    }
  }]
}

accuracy_score 字段是关键。0.95+ = 建筑物级精度。0.7-0.95 = 街道级精度。低于 0.7 = 仅城市或邮编级精度。

对比:选择哪种方法?

方法难度速度适用场景免费额度
1. CSV + CSV2GEO⭐⭐⭐⭐⭐一次性任务100 行/天
2. =GEOCODE()基础⭐⭐10-50 行1,000 次/天
3. 批量菜单基础⭐⭐⭐⭐100-5,000 行1,000 次/天
4. 反向地理编码基础⭐⭐⭐坐标 → 地址1,000 次/天

我的建议方法 1 适合一次性需求。方法 3 适合经常使用。超过 10,000 行时,直接使用批量地理编码

技巧和最佳实践

1. 清理您的地址

垃圾进,垃圾出。在地理编码之前:

  • 去除空格:=TRIM(A2)
  • 统一缩写:"路" vs "路"、"大街" vs "大道"
  • 包含国家代码:CN、JP、KR 以获得更好的结果
  • 合并各部分:=A2 & ", " & B2 & ", " & C2 & " " & D2

2. 始终包含国家

提高精度的最佳方法是提供国家信息。"建国门外大街1号"可能存在于多个城市。添加"CN"可以立即消除歧义。

3. 大批量使用批处理

=GEOCODE() 适合 10-50 行。超过这个数量,请使用批量菜单(方法 3)或导出 CSV 到 CSV2GEO 进行批量地理编码。文件导入对于大批量数据快 10 倍

4. 利用缓存

对同一地址进行两次地理编码是浪费。先检查坐标是否已存在:

if (sheet.getRange(row, 6).getValue()) continue;

5. 处理错误

某些地址无法地理编码——拼写错误、数据不完整。脚本会返回"未找到"或"错误",方便您识别问题。

6. 监控 API 使用量

免费套餐提供每天 1,000 次请求。5,000 行可以分 5 天处理,或升级到更高套餐。

7. 使用 API 实现自动化

对于定期地理编码,使用完整的地理编码 API 构建自动化工作流。CSV2GEO 提供 19 个端点,涵盖正向地理编码、反向地理编码、批量处理、地点搜索和行政边界。

常见问题

在 Google Sheets 中地理编码免费吗?

是的。零代码 CSV 方式提供每天 100 行免费。API 方式提供每天 1,000 次请求

我可以地理编码多少个地址?

免费每天 1,000 个。超过 50,000 个时,导出 CSV 使用批量地理编码

需要 API 密钥吗?

仅方法 2、3 和 4 需要。方法 1 不需要任何东西——只需上传到 CSV2GEO

支持国际地址吗?

是的。CSV2GEO 覆盖 200 多个国家,拥有 4.61 亿多个地址。包含 ISO 代码(CN、DE、JP)。查看我们关于澳大利亚巴西的指南。

精度如何?

对于格式良好的地址,90% 以上的结果达到建筑物级精度。accuracy_score(0 到 1)表示置信度。更多详情请参阅我们的地址转经纬度指南

可以反向地理编码吗?

可以。参见上面的方法 4。也可以通过反向地理编码工具零代码使用。

数据会自动更新吗?

不会。坐标是静态值。如果您修改了地址,需要重新运行函数或脚本。

Google Sheets 和 Excel 有什么区别?

Google Sheets 使用 Apps Script(JavaScript),Excel 使用 VBA。基本逻辑相同。Google Sheets 是云原生的。Excel 更适合超大文件(100 万行以上)。专题指南:在 Excel 中地理编码

开始地理编码

将您的地址上传到免费批量地理编码工具,或在 Google Sheets 中使用上述脚本。每天 100 行免费,无需注册。

I.A. / CSV2GEO Creator

相关文章

Ready to geocode your addresses?

Use our batch geocoding tool to convert thousands of addresses to coordinates in minutes. Start with 100 free addresses.

Try Batch Geocoding Free →