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