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

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

| April 16, 2026
如何在 Google Sheets 中地理编码地址:4 种有效方法

如果您的 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

相关文章

More in Guides →
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 →