连接几个单元格并从串联创建链接

时间:2015-10-30 03:46:15

标签: google-apps-script google-sheets spreadsheet

我正在尝试创建一个假设的脚本 第一列包含地址 J列包含City 列K包含邮政编码 假设有数千个条目

我想要一个可以连接这些值的脚本,并在第一列上创建一个谷歌地图链接。

我确实设法让链接部分部分工作,但在创建链接之前无法将其连接起来。

function googlemaps() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getActiveRange() + ss.getActiveRange().offset(0, 0, 1, 2);
// var t = r.offset(1, 0, 2);
var v = r.getValues();
for(var i=0;i<v.length;i++) {
for(var j=0;j<v[0].length;j++) {
  v[i][j] = '=HYPERLINK("http://google.com/maps/places/'+v[i][j]+'","'+v[i][j]+'")'
  }
 }
r.setValues(v);  
};

它一直给我这个错误

 // typeError: Cannot find function getValues in object RangeRange

我知道这是偏移的东西,但我无法让它发挥作用。 我想要的一个例子是

I3 = 1515 SW 2 CT
J3 = Miami
K3 = 33196

运行此脚本后,它会改变我的

=hyperlink("http://google.com/maps/places/1515 SW 2 CT Miami 33196", "1515 SW 2 CT")

应该能够在一个范围内工作。

任何人都请帮忙。

我也尝试了这个:

function googlemaps() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getActiveRange();
var r2 = ss.getActiveRange().offset(0, 1);
var r3 = ss.getActiveRange().offset(0, 2);
var v = r.getValues();
var v1= r2.getValues();
var v2= r3.getValues();
var vf= v + v1 + v2;
for(var i=0;i<vf.length;i++) {
for(var j=0;j<vf[0].length;j++) {
  vf[i][j] = '=HYPERLINK("http://google.com/maps/places/'+vf[i][j]+'","'+vf[i][j]+'")'
}
}
r.setValues(vf);  
};

那也行不通,给我错误找不到方法setValues(string)

1 个答案:

答案 0 :(得分:0)

你也可以只用公式来做到这一点。

I3 = 1515 SW 2 CT
J3 = Miami
K3 = 33196
L3 = =HYPERLINK(CONCATENATE("http://maps.google.com/maps?   f=q&source=s_q&hl=en&geocode=&q=",I3," ",J3," ",K3),"Google Map")

抱歉,我不明白你的要求。试试这个。

function googlemaps() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow()
var r = ss.getSheetValues(3,9,lr-2,3);//Assunes address data starts on row 3
for(var i=0;i<lr-2;i++) {
var addr = r[i][0]+' ' +r[i][1]+' ' +r[i][2] // Concatenates address data
r[i][9] = '=HYPERLINK("http://maps.google.com/maps?   f=q&source=s_q&hl=en&geocode=&q='+addr+'","'+addr+'")'
ss.getRange(i+3,9).setFormula(r[i][9]);
ss.getRange(i+3,10).clear(); //Clears City
ss.getRange(i+3,11).clear(); //Clears Zip
}
};

这是另一个版本,而不是创建超链接数组并将它们一次写回,而不是一次写入一行。它要快得多。我用4000个地址测试了它。此外,我将其更改为从第2行开始(假设标题行)。如果您需要调整它的起始位置,请使用Google setRange(1,1,1,1)表示法来解释每个数字的含义。它控制起始行。如果更改起始行,则需要更改lr-1,以便总行数正确。

function googlemaps1() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow()
var r = ss.getSheetValues(2,9,lr-1,3);//Assunes address data starts on row 2
var arr = []
for(var i=0;i<lr-1;i++) {
var addr = r[i][0]+' ' +r[i][1]+' ' +r[i][2] // Concatenates address data
r[i][9] = '=HYPERLINK("http://maps.google.com/maps? f=q&source=s_q&hl=en&geocode=&q='+addr+'","'+addr+'")'
 arr.push([r[i][9]])
 }
 var clr =  ss.getRange(2,10,arr.length,2).clear();//clear state and zip
 var destrange = ss.getRange(2,9,arr.length,1);
 destrange.setFormulas(arr);// set all hyperlinks
 };