繁体   English   中英

电子表格中所有工作表上的setActiveCell。 Google Apps脚本

[英]setActiveCell on all sheets within a spreadsheet. Google Apps Script

我有一个包含多个工作表的Google电子表格。 我希望将所有选项卡的光标设置为onOpen的特定单元格。 第一行的每个单元格代表一年中的一个星期,从这一年开始直到整个一年。 我编写了一些代码,以便在打开时在第5行上预先选择该特定的列(一年中的某周)。

当前,只有最后一张工作表已选择我想要的单元格。 这是因为setActiveCell一次只能用于一个单元格。 我也尝试过setActiveRangesetActiveSelection无济于事。

我几年前在这里找到了一个问题,但是该解决方案对我不起作用。 从那以后,也许情况有所改变。

这是我的代码:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(),0,1);
    return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
  }
  var now = new Date();
  var weekNum = now.getWeek(); 
  var sheets = ss.getSheets();
  for(var i = 0; i < sheets.length; i++) {
    var newRange = sheets[i].getRange(5,weekNum + 1);      
    sheets[i].setActiveCell(newRange);
  }
}

在上面提供的链接中,我尝试了所有给定解决方案的差异,但是我的代码从未完全相同,因为我没有在寻找与OP完全相同的东西。 例如,使用Jacob Jan Tuistra的最新代码解决方案,我想到了:

function setCursor() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(),0,1);
    return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
  }
  var now = new Date();
  var weekNum = now.getWeek(); 
  ss.getSheets().forEach(function (sheet, weekNum) {
  Logger.log(weekNum);
      sheet.setActiveRange(sheet.getRange(5,weekNum+1));
    });
}

这也只设置最后一张纸

遍历工作表集合时,您似乎需要调用SpreadsheetApp.flush()

function onOpen() {
  SpreadsheetApp.getActive().getSheets().forEach(function (s) {
    s.setActiveSelection("B4");
    SpreadsheetApp.flush(); // Force this update to happen
  });
}

我的猜测是,Apps Script的执行引擎可以优化对单个调用的写入,并且在该单个调用中,只能进行一个活动选择。 调用冲洗力每张纸要调用1次以进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM