Ограничаване на обажданията за геокодиране в Google Spreadsheet

Използвам този скрипт за геокодиране на адрес колона в електронна таблица на 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