遍历 Google 个工作表中的选定单元格
iterate through selected cells in Google Sheets
我想将文本添加到所有选定行的最后一列:
var sh = ss.getActiveSheet();
lCol = sh.getLastColumn()
var selected_cells=ss.getActiveRangeList()
var rgs=selected_cells.getRanges();
for (var i = 0; i < rgs.length; i++) {
var range=rgs[i];
var lRow=range.getRow();
var cell = sh.getRange(lRow,lCol+1,1,1);
var firstname=sh.getRange(lRow, 2).getValue();
var lastname=sh.getRange(lRow, 3).getValue();
var email=sh.getRange(lRow, 8).getValue();
var link="http://192.168.80.1/d/?email="+email+"&firstname="+firstname+"&lastname="+lastname;
cell.setFormula("=HYPERLINK(\""+link+"\",\"click\")");
}
但它只是添加到第一行。
我错过了什么?
您想将 =HYPERLINK()
放在 select 行的最后一列。如果我的理解是正确的,这个修改怎么样?我对你的问题很感兴趣。所以我想到了你的问题,因为我想我想从你的问题中学习。
修改点:
- 例如,当您 select "A1"、"B2" 和 "C3" 的单元格时,范围列表在一个数组中有 3 个元素。它们是 "A1"、"B2" 和 "C3"。当您 select "A1"、"A2" 和 "A3" 的单元格时,范围列表在数组中有 1 个元素。那些是 "A1:A3"。
- 根据您的脚本,我认为这可能是导致您出现问题的主要原因。所以我想提出以下流程和修改后的脚本。
流量:
- 首先,解析检索到的范围列表。
- 由此,列表被连续单元格和单个单元格分隔。
- 使用解析后的列表,导入你想要的值。
当您使用这个修改后的脚本时,请运行 main()
.
修改脚本:
function getFormula(e) {
var firstname = e[1];
var lastname = e[2];
var email = e[7];
var link = "http://192.168.80.1/d/?email=" + email + "&firstname=" + firstname + "&lastname=" + lastname;
return "=HYPERLINK(\"" + link + "\",\"click\")";
}
// Please run this function, when you use this modified script.
function main() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var selected_cells = ss.getActiveRangeList();
var rgs = selected_cells.getRanges();
for (var i = 0; i < rgs.length; i++) {
var numRows = rgs[i].getNumRows();
if (numRows > 1) {
var values = sh.getRange(rgs[i].getRow(), 1, numRows, lCol).getValues();
var formulas = values.map(function(e) {return [getFormula(e)]});
sh.getRange(rgs[i].getRow(), lCol + 1, numRows, 1).setFormulas(formulas);
} else {
var e = sh.getRange(rgs[i].getRow(), 1, 1, lCol).getValues()[0];
sh.getRange(rgs[i].getRow(), lCol + 1, 1, 1).setFormula(getFormula(e));
}
}
}
注:
- 根据您的脚本,在修改后的脚本中,它假定
firstname
、lastname
和 email
分别位于 B 列、C 列和 H 列中。如果你想改变这个,请修改它。
如果我误解了你的问题,我很抱歉。
我想将文本添加到所有选定行的最后一列:
var sh = ss.getActiveSheet();
lCol = sh.getLastColumn()
var selected_cells=ss.getActiveRangeList()
var rgs=selected_cells.getRanges();
for (var i = 0; i < rgs.length; i++) {
var range=rgs[i];
var lRow=range.getRow();
var cell = sh.getRange(lRow,lCol+1,1,1);
var firstname=sh.getRange(lRow, 2).getValue();
var lastname=sh.getRange(lRow, 3).getValue();
var email=sh.getRange(lRow, 8).getValue();
var link="http://192.168.80.1/d/?email="+email+"&firstname="+firstname+"&lastname="+lastname;
cell.setFormula("=HYPERLINK(\""+link+"\",\"click\")");
}
但它只是添加到第一行。 我错过了什么?
您想将 =HYPERLINK()
放在 select 行的最后一列。如果我的理解是正确的,这个修改怎么样?我对你的问题很感兴趣。所以我想到了你的问题,因为我想我想从你的问题中学习。
修改点:
- 例如,当您 select "A1"、"B2" 和 "C3" 的单元格时,范围列表在一个数组中有 3 个元素。它们是 "A1"、"B2" 和 "C3"。当您 select "A1"、"A2" 和 "A3" 的单元格时,范围列表在数组中有 1 个元素。那些是 "A1:A3"。
- 根据您的脚本,我认为这可能是导致您出现问题的主要原因。所以我想提出以下流程和修改后的脚本。
流量:
- 首先,解析检索到的范围列表。
- 由此,列表被连续单元格和单个单元格分隔。
- 使用解析后的列表,导入你想要的值。
当您使用这个修改后的脚本时,请运行 main()
.
修改脚本:
function getFormula(e) {
var firstname = e[1];
var lastname = e[2];
var email = e[7];
var link = "http://192.168.80.1/d/?email=" + email + "&firstname=" + firstname + "&lastname=" + lastname;
return "=HYPERLINK(\"" + link + "\",\"click\")";
}
// Please run this function, when you use this modified script.
function main() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var selected_cells = ss.getActiveRangeList();
var rgs = selected_cells.getRanges();
for (var i = 0; i < rgs.length; i++) {
var numRows = rgs[i].getNumRows();
if (numRows > 1) {
var values = sh.getRange(rgs[i].getRow(), 1, numRows, lCol).getValues();
var formulas = values.map(function(e) {return [getFormula(e)]});
sh.getRange(rgs[i].getRow(), lCol + 1, numRows, 1).setFormulas(formulas);
} else {
var e = sh.getRange(rgs[i].getRow(), 1, 1, lCol).getValues()[0];
sh.getRange(rgs[i].getRow(), lCol + 1, 1, 1).setFormula(getFormula(e));
}
}
}
注:
- 根据您的脚本,在修改后的脚本中,它假定
firstname
、lastname
和email
分别位于 B 列、C 列和 H 列中。如果你想改变这个,请修改它。
如果我误解了你的问题,我很抱歉。