与选择配合使用的Google Apps脚本

问题描述 投票:0回答:1

我想在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。

google-apps-script google-sheets selection
1个回答
0
投票

尝试一下:

将其与您所拥有的进行比较,我认为您可以自己解决。学习经验将是值得的。您可以选择任何范围。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.