我有以下代码,通过选择单元格将一系列邮政编码转换为长纬度,在本例中为 A2:C3
它工作得很好,但我希望它做的是将范围添加到数组中,然后将数组转储回工作表,假设它会更快。
我已经尝试过 cells.split
但仍然只能一次打印一行。
示例数据,英国邮政编码,长和纬度单元格为空
| A | B | C |
1 | Postcode | Long | Lat |
2 | SW1 1AA | | |
3 | EC1V 9BP | | |
当前应用脚本
function getGeocodingRegion() {
return PropertiesService.getDocumentProperties().getProperty('GEOCODING_REGION') || 'uk';
}
function addressToPosition() {
var sheet = SpreadsheetApp.getActiveSheet();
var cells = sheet.getActiveRange();
var addressColumn = 1;
var addressRow;
var latColumn = addressColumn + 1;
var lngColumn = addressColumn + 2;
var geocoder = Maps.newGeocoder().setRegion(getGeocodingRegion());
var location;
for (addressRow = 1; addressRow <= cells.getNumRows(); ++addressRow) {
var address = cells.getCell(addressRow, addressColumn).getValue();
// Geocode the address and plug the lat, lng pair into the
// 2nd and 3rd elements of the current range row.
location = geocoder.geocode(address);
// 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"];
cells.getCell(addressRow, latColumn).setValue(lat);
cells.getCell(addressRow, lngColumn).setValue(lng);
}
}
};
最佳答案
由于您要对电子表格的每一行执行此操作,因此您只需为所有行执行 getValues(),循环遍历值并构建另一个二维数组,然后使用 setValues() 将该数组放置在地址列旁边
function addressToPosition() {
var sheet = SpreadsheetApp.getActiveSheet();
// Get all values at once, a 2D array with getLastRow() rows and 1 column
var cells = sheet.getRange(1,1,sheet.getLastRow(),1).getValues();
var results = []; // Will build a 2D array for setValues()
for( var i=0; i<cells.length; i++ ) {
var location = geocoder.geocode(cells[i][0]);
if( location.status === "OK" ) {
// I'm assuming this works, can't test
var lat = location["results"][0]["geometry"]["location"]["lat"];
var lng = location["results"][0]["geometry"]["location"]["lng"];
results.push([lat,lng]);
}
else {
results.push(["",""]); // if status is not OK
}
}
// Now put the results in columns B and C
sheet.getRange(1,2,results.length,results[0].length).setValues(results);
};
关于javascript - 在循环内向数组添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805284/