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

Google Apps Script遍历地址生成静态地图存Drive报错求助

解决Google Apps Script遍历地址生成卫星地图并保存到Drive的错误

你需要遍历表格中的地址列表生成卫星静态地图并保存到Google Drive,后续计划根据第二列的值将地图分类到不同文件夹。目前单个地址生成地图的代码可正常运行,但遍历代码报错 TypeError: Cannot read property 'createFile' of undefined,同时不清楚如何正确生成Blob并保存为PNG格式。

现有错误代码

function save_adresses() {
var sheet = SpreadsheetApp.getActiveSheet();
var addresses = sheet.getRange(1,1,13,1).getValues()
for (var i = 0; i <= 8; i = i + 1) {
  Maps.newStaticMap()
  .setMapType(Maps.StaticMap.Type.SATELLITE)
  .setCenter(addresses[i])
  .setZoom(19)
  .getBlob()
  .DriveApp.createFile(addresses[i])
  .getAs('image/png')
}
}

错误原因分析

  1. 链式调用逻辑错误:getBlob()返回的是Blob对象,该对象没有DriveApp属性,直接链式调用.DriveApp.createFile()会导致找不到该属性,触发报错。正确的做法是用DriveApp.createFile()方法接收Blob对象。
  2. 数组取值错误:getValues()返回的是二维数组,addresses[i]是一个包含单个元素的数组(如["XX街道XX号"]),直接传给setCenter或作为文件名会引发异常,需要取出数组内的具体值addresses[i][0]。
  3. 格式转换位置错误:getAs('image/png')应该在Blob对象上调用,而非createFile返回的File对象之后。

修正后的代码

function saveAddresses() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // 获取A列第1到13行的地址数据
  var addresses = sheet.getRange(1, 1, 13, 1).getValues();
  
  for (var i = 0; i < addresses.length; i++) {
    var address = addresses[i][0];
    // 跳过空地址
    if (!address) continue;
    
    // 生成卫星地图Blob并指定为PNG格式
    var mapBlob = Maps.newStaticMap()
      .setMapType(Maps.StaticMap.Type.SATELLITE)
      .setCenter(address)
      .setZoom(19)
      .getBlob()
      .getAs('image/png');
    
    // 保存到Google Drive根目录,文件名带PNG后缀
    DriveApp.createFile(mapBlob, address + '.png', MimeType.PNG);
  }
}

后续按第二列分类到不同文件夹的实现思路

  1. 获取分类值:在循环内通过行号获取第二列的分类内容(注意表格行号从1开始,对应循环索引i+1)。
  2. 查找/创建文件夹:检查Drive中是否存在对应分类的文件夹,不存在则创建。
  3. 保存到目标文件夹:调用目标文件夹的createFile方法,而非DriveApp的全局方法。

示例代码片段:

// 在循环内部添加以下代码
var category = sheet.getRange(i+1, 2).getValue();
var targetFolder = null;
// 查找同名文件夹
var folders = DriveApp.getFoldersByName(category);
if (folders.hasNext()) {
  targetFolder = folders.next();
} else {
  // 不存在则新建文件夹
  targetFolder = DriveApp.createFolder(category);
}
// 将地图文件保存到目标文件夹
targetFolder.createFile(mapBlob, address + '.png', MimeType.PNG);

内容的提问来源于stack exchange,提问作者Julie-Anne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:55:19