为什么getActiveRange()不起作用,还有替代方法吗?

时间:2019-07-25 23:37:18

标签: google-apps-script google-sheets

当我尝试调用sheet.getActiveRange()函数时,它不会返回表示我正在使用的工作表的当前选定单元格的范围。相反,它通常认为活动范围是cell(1,1),但事实并非如此。该功能在不工作后工作了几分钟,但此后又恢复了同样的问题。这个问题似乎记录在这里1,但是没有答案,所以我再次提出这个问题。

我尝试在getActiveRange()上使用activate(),但是它只会将屏幕上的选择更改为cell(1,1),清楚地说明了问题。

var rng = master.getActiveRange();
Logger.log(rng.getHeight());

从理论上讲,所选范围的高度可以为5或其他任何值,但由于cell(1,1)的高度为1,因此它总是返回为1。基本上,它总是认为活动范围是cell(1,1)。

2 个答案:

答案 0 :(得分:0)

此功能将在活动图纸上获取活动范围。

function runOne() {
  var rl=SpreadsheetApp.getActiveRangeList().getRanges();
  var ls='';
  for(var i=0;i<rl.length;i++) {
    if(i>0) {
      ls+=', ';
    }
    ls+=Utilities.formatString('\'%s\'!%s',rl[i].getSheet().getName(),rl[i].getA1Notation());
  }
  SpreadsheetApp.getUi().alert(ls);
}

答案 1 :(得分:0)

我正在对此进行测试,但我仍然保持与您相同的行为,如果一段时间后需要使用SpreadsheetApp.getActiveSheet(),则需要对其进行“更新”。为此,您只需转到工作表并从工具->脚本编辑器中打开脚本编辑器,然后在运行代码时便会对其进行更新。

此外,我使用Selection class进行了测试,它提供了有关如何进行管理的很好的示例。

要进行快速测试,可以使用以下代码:

function selection(){
  var selection = SpreadsheetApp.getActiveSheet().getSelection();
  var activeRange = selection.getActiveRange();
  Logger.log("Active Cell: " + selection.getCurrentCell().getA1Notation())
  Logger.log("Range: " + activeRange.activate().getA1Notation());
}