如何创建每分钟移动到下一个工作表标签的电子表格脚本

时间:2018-10-11 14:46:09

标签: google-sheets spreadsheet

我有一个电子表格,可以在2个监视器上显示信息,该文件有5到30个标签,我一直在尝试获取以下脚本,该脚本带有时间驱动的触发器,以便每分钟从一个标签移动到下一个标签,但是我有两个问题。 1)-我需要循环以跳过4个选项卡(它们具有固定的名称),并且我目前无法找到可行的解决方案,以及2)-1分钟的时间驱动触发器没有执行任何操作,也不起作用。 >

以下是我正在测试和测试的2个脚本,以查看是否找到有效的脚本...我是FYI脚本的初学者。

脚本1:

function MoveNext() {
  var spreadsheet = SpreadsheetApp.getActive();
  var nextSheetIndex = spreadsheet.getActiveSheet().getIndex() + 1;

  if (nextSheetIndex > spreadsheet.getSheets().length) { nextSheetIndex = 1; }
  spreadsheet.setActiveSheet(spreadsheet.getSheets()[nextSheetIndex - 1],true);

还有脚本2 :该脚本旨在跳过我不想循环播放的4个标签

var ss = SpreadsheetApp.getActive();
var sheets = ss.getSheets();

for (i = 0; i < sheets.length; i++) {
  switch (sheets[i].getSheetName()) {
    case "T1":
    case "T0":
    case "Summary Panel":
    case "Flight Info":
    case "Template":
      break;
    default:


      var nextSheetIndex = ss.getActiveSheet().getIndex() + 1;
      if (nextSheetIndex > ss.getSheets().length) {
        nextSheetIndex = 1;
      }
      ss.setActiveSheet(ss.getSheets()[nextSheetIndex - 1], true);

对于您可能会发现的基本错误,我深表歉意。我还是新手。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您必须自己添加计时器代码,但这是如何移至下一个“批准”工作表的示例。

function MoveNext() {
  var sheetsToSkip = ["Sheet3", "Sheet4", "Sheet7"];
  var thisBook = SpreadsheetApp.getActive();
  var sheetCount = thisBook.getNumSheets();
  var thisSheet = SpreadsheetApp.getActiveSheet();
  var thisSheetName = thisSheet.getName();
  var thisSheetIndex = thisSheet.getIndex() - 1;  //subtract one to get the array index
  var allSheets = thisBook.getSheets();

  var i = thisSheetIndex;
  var notDone = true;
  while (notDone) {
    if (i == (sheetCount-1)) {
      i = 0;
    } else {
      i++;
    }
    Logger.log('next sheet index is ' + i);
    var nextName = allSheets[i].getName();
    if (sheetsToSkip.indexOf(nextName) == -1) {
      var nextSheet = allSheets[i];
      Logger.log('next active sheet should be ' + nextSheet.getName());
      thisBook.setActiveSheet(nextSheet);
      notDone = false;
    }
  }
}