我想在Google表格中添加一个菜单项,以对所选单元格执行任务。网络搜索(包括堆栈溢出)表明getActiveRange()
方法是正确的方法。但是,当我查询返回的Range对象时,无论选择了什么单元格,它始终报告第一行等于1,行数等于1。我应该使用什么?
这里是重现问题的精简脚本:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
function onOpen() {
var myMenu = [];
myMenu.push({name: "Detect selection", functionName: "detectSelection"});
ss.addMenu("My Menu", myMenu);
}
function detectSelection() {
var range = sheet.getActiveRange();
var firstRow = range.getRow();
var lastRow = range.getLastRow();
var numRows = range.getNumRows();
sheet.getRange(1,1).setValue("First Row");
sheet.getRange(1,2).setValue(firstRow);
sheet.getRange(2,1).setValue("Last Row");
sheet.getRange(2,2).setValue(lastRow);
sheet.getRange(3,1).setValue("Number of Rows");
sheet.getRange(3,2).setValue(numRows);
}
我可以选择希望的任何单元格组,从“我的菜单”中选择“检测选择”,并且第一行,最后一行和行数将始终报告为1。
尝试一下:
将其与您所拥有的进行比较,我认为您可以自己解决。学习经验将是值得的。您可以选择任何范围。
function runOne() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sh=ss.getSheetByName('Sheet1');
var rg=sh.getActiveRange();
sh.clearContents();
var vA=[['rg.getRow()',rg.getRow()],['rg.getColumn()',rg.getColumn()],['rg.getLastRow()',rg.getLastRow()],['rg.getLastColumn()',rg.getLastColumn()],['rg.getNumRows()',rg.getNumRows()],['rg.getNumColumns()',rg.getNumColumns()]];
var vB=[];
for(var i=0;i<rg.getHeight();i++) {
vB[i]=[];
for(var j=0;j<rg.getWidth();j++) {
vB[i][j]=Utilities.formatString('%s,%s',rg.getRow()+i,rg.getColumn()+j);
}
}
sh.getRange(rg.getRow(),rg.getColumn(),vB.length,vB[0].length).setValues(vB);
sh.getRange(sh.getLastRow()+1,rg.getColumn(),vA.length,vA[0].length).setValues(vA);
}