Ограничение вызовов геокодирования в электронной таблице Google

Я использую этот скрипт для геокодирования адреса столбец в таблице Google. Он создает функцию getLatLon, которая принимает значение из столбца адреса. Несмотря на то, что у меня всего 190 строк, я быстро достиг дневного лимита API геокодирования в 2500. Я думаю, это потому, что скрипт запускается каждый раз при загрузке листа.

Я хочу, чтобы скрипт запускался только в том случае, если адрес еще не был геокодирован. Для этого я попытался получить доступ к значению ячейки с формулой, чтобы увидеть, пусто ли оно. Если да, запустите геокодер. Но из-за этого все мои ячейки, даже геокодированные, вместо этого становятся пустыми.

Вот мой код. Я не уверен, правильно ли я использую getValue() (он возвращает пустую строку, если нет значения), или тот факт, что в моей ячейке есть формула, делает значение непустым.

Как еще можно проверить наличие пустого значения в ячейке с формулой?

function getLatLon(address) {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var cell = sh.getActiveCell();
  var value = cell.getValue();

  if (address == '') {
    Logger.log("Must provide an address");
    return;
  }


  if (value == '' ) {

    var geocoder = Maps.newGeocoder();
    var location;
    location = geocoder.geocode(address);
    Utilities.sleep(2000);
// Only change cells if geocoder seems to have gotten a
// valid response.
    if (location.status == 'OK') {
      lat = location["results"][0]["geometry"]["location"]["lat"];
      lng = location["results"][0]["geometry"]["location"]["lng"];
      return lat + "," + lng

    } 
  }   
};



Ответы (1)


Вы можете переместить геокодированные строки на другой лист. Всегда сохраняйте четкие данные для скрипта.

person Alpha Yang    schedule 10.03.2014
comment
Это то, что я в итоге сделал, но только со значениями копирования → вставки. Это то, что вы имеете в виду под четкими данными? И есть ли способ автоматизировать это с помощью скрипта? - person robroc; 11.03.2014