只有在没有获取数据的情况下,如何才能使我的函数 运行 ?
How can I make my function run only if there is no fetched data?
我有一个 Google Apps 脚本项目,我可以在其中在 Google Sheet 的 A 列中输入位置名称,并使用 Google 地点 API。我一直在研究这个 for a bit,我最近的修订旨在解决一个问题,即我的函数发出了太多请求,导致我在 Google 云平台上耗尽了 200 美元的免费信用额度.
我注意到每次我打开 Google Sheet 时,它都必须再次获取所有数据,通过更多的请求来查找它已经找到的信息。
为了获取所有信息并将其保存在我的 Sheet 中,我最好的选择是什么,这样它就不会在每次打开 Sheet 时都发出新的信息请求?只是一个 If 语句,用于检查一旦函数获得 运行?
,其中一个单元格中是否已经有一个值被填充
下面是我的代码。现在,我只是在单元格 B2 中 运行 =COMINED2(A2) 来获取 A2 中位置的信息,并将其放置在 B2、C2、D2、E2 等中。如果人们有其他东西,我很乐意重新配置有什么建议吗?
function COMBINED2(text) {
var API_KEY = 'AIzaSyvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQ';
var baseUrl = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json';
var queryUrl = baseUrl + '?input=' + text + '&inputtype=textquery&key=' + API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
var response = UrlFetchApp.fetch(queryUrl);
var json = response.getContentText();
var placeId = JSON.parse(json);
var ID = placeId.candidates[0].place_id;
var fields = 'name,geometry,formatted_address,formatted_phone_number,website,url,types,opening_hours';
var baseUrl2 = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=';
var queryUrl2 = baseUrl2 + ID + '&fields=' + fields + '&key='+ API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
if (ID == '') {
return 'Give me a Google Places URL...';
}
var response2 = UrlFetchApp.fetch(queryUrl2);
var json2 = response2.getContentText();
var place = JSON.parse(json2).result;
var placeName = place.name;
var placeAddress = place.formatted_address;
var placePhoneNumber = place.formatted_phone_number;
var placeWebsite = place.website;
var placeURL = place.url;
var weekdays = '';
place.opening_hours.weekday_text.forEach((weekdayText) => {
weekdays += ( weekdayText + '\r\n' );
} );
var data = [ [
place.name,
place.formatted_address,
place.formatted_phone_number,
place.website,
place.url,
weekdays.trim(),
] ];
return data;
}
我认为自定义公式不适用于您的情况,因为自定义公式应该独立于范围,即它不应检查 特定 单元格或范围是否有价值
您最好创建一个调用 COMBINED2
的常规 Apps 脚本函数,然后使用脚本 UI 手动触发它,或者可能将其分配给按钮。
// this function calls COMBINED2()
function call_COMBINED2() {
var ss = SpreadsheetApp.getActiveSheet();
var text = ss.getRange("A2").getValue();
var data = COMBINED2(text);
var dest = ss.getRange("B2:G2");
dest.setValues(data);
}
我有一个 Google Apps 脚本项目,我可以在其中在 Google Sheet 的 A 列中输入位置名称,并使用 Google 地点 API。我一直在研究这个 for a bit,我最近的修订旨在解决一个问题,即我的函数发出了太多请求,导致我在 Google 云平台上耗尽了 200 美元的免费信用额度.
我注意到每次我打开 Google Sheet 时,它都必须再次获取所有数据,通过更多的请求来查找它已经找到的信息。
为了获取所有信息并将其保存在我的 Sheet 中,我最好的选择是什么,这样它就不会在每次打开 Sheet 时都发出新的信息请求?只是一个 If 语句,用于检查一旦函数获得 运行?
,其中一个单元格中是否已经有一个值被填充下面是我的代码。现在,我只是在单元格 B2 中 运行 =COMINED2(A2) 来获取 A2 中位置的信息,并将其放置在 B2、C2、D2、E2 等中。如果人们有其他东西,我很乐意重新配置有什么建议吗?
function COMBINED2(text) {
var API_KEY = 'AIzaSyvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQ';
var baseUrl = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json';
var queryUrl = baseUrl + '?input=' + text + '&inputtype=textquery&key=' + API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
var response = UrlFetchApp.fetch(queryUrl);
var json = response.getContentText();
var placeId = JSON.parse(json);
var ID = placeId.candidates[0].place_id;
var fields = 'name,geometry,formatted_address,formatted_phone_number,website,url,types,opening_hours';
var baseUrl2 = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=';
var queryUrl2 = baseUrl2 + ID + '&fields=' + fields + '&key='+ API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON;
if (ID == '') {
return 'Give me a Google Places URL...';
}
var response2 = UrlFetchApp.fetch(queryUrl2);
var json2 = response2.getContentText();
var place = JSON.parse(json2).result;
var placeName = place.name;
var placeAddress = place.formatted_address;
var placePhoneNumber = place.formatted_phone_number;
var placeWebsite = place.website;
var placeURL = place.url;
var weekdays = '';
place.opening_hours.weekday_text.forEach((weekdayText) => {
weekdays += ( weekdayText + '\r\n' );
} );
var data = [ [
place.name,
place.formatted_address,
place.formatted_phone_number,
place.website,
place.url,
weekdays.trim(),
] ];
return data;
}
我认为自定义公式不适用于您的情况,因为自定义公式应该独立于范围,即它不应检查 特定 单元格或范围是否有价值
您最好创建一个调用 COMBINED2
的常规 Apps 脚本函数,然后使用脚本 UI 手动触发它,或者可能将其分配给按钮。
// this function calls COMBINED2()
function call_COMBINED2() {
var ss = SpreadsheetApp.getActiveSheet();
var text = ss.getRange("A2").getValue();
var data = COMBINED2(text);
var dest = ss.getRange("B2:G2");
dest.setValues(data);
}