Скрипт для автоматического переключения листа / вкладок - PullRequest
0 голосов
/ 12 июня 2019

У меня есть листы Google с вкладками (названными 0,1,2,3,4), которые содержат диаграммы и таблицы.

Я пытаюсь создать скрипт приложения для переключения между этими вкладками после некоторыхX минут, чтобы я мог использовать его и отображать на телевизоре в качестве динамической информационной панели.

Я написал сценарий, и он работает, если я запускаю редактор сценариев.Я также создал триггер таймера для вызова этой функции, однако этот триггер не работает.У кого-нибудь есть подсказка?

function switchTabs() {

  var sheet_number = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  var next_sheet_number = parseInt(sheet_number) + 1;
  if(next_sheet_number>4){ next_sheet_number = 0; }
  var activate = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(next_sheet_number).activate();

}

1 Ответ

2 голосов
/ 12 июня 2019

Шоу-шоу

Вот скрипт, который создает листовое шоу, которое похоже на слайд-шоу только с листами вместо слайдов. Боковая панель позволяет вам установить время между листами. В вашем случае вы можете просто использовать два листа, и у вас будет необходимый переключатель.

codes.gs:

function onOpen()
{
  SpreadsheetApp.getUi().createMenu('G+ Script Problems')
      .addItem('showSheets', 'showSheet')
      .addItem('Sheet Show Sidebar', 'SheetShowSidebar')
      .addToUi();
}

SheetShowDialog.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
    <style>
      #my_block{border:2px solid black;background-color:rgba(0,150,255,0.2);padding:10px 10px 10px 10px;}
      #conv_block{border: 1px solid black;padding:10px 10px 10px 10px;}
      .bttn_block{padding:5px 5px 0px 0px;}
      .sndr_block {border:1px solid rgba(0,150,0,0.5);background-color:rgba(150,150,0,0.2);margin-bottom:2px;}
    </style>
  </head>
  <body>
  <form>
    <div id="my_block" class="block form-group">
      <div class="sndr_block">
        <strong>Show Info:</strong>
        <br />Sheets in Show:
        <br /><div id="shtsinfo1"><input id="txt1" type="text" size="4" class="action"/></div>
        <br />Sheet Name:
        <br /><input id="txt4" type="text" size="20" class="action"/>
        <br />Sheet Number:
        <br /><input id="txt3" type="text" size="4" class="action"/>
        <br />Sheet Delay(seconds):
        <br /><input id="txt2" type="text" size="4" class="action"/>
        <select id="sel1" onChange="loadTxt('sel1','txt2');">
          <option value="5">5</option>
          <option value="10" selected>10</option>
          <option value="15">15</option>
          <option value="20">20</option>
          <option value="25">25</option>
          <option value="30">30</option>
          <option value="35">35</option>
          <option value="40">40</option>
          <option value="45">45</option>
          <option value="50">50</option>
        </select>
        <br /><strong>Timer Controls</strong>
        <div class="bttn_block"><input type="button" value="Start" name="startShow" id="startShow" onClick="startmytimer();" class="red" /></div>
        <div class="bttn_block"><input type="button" value="Stop" name="stopTimer" id="stopTimer" class="red" /></div>
        <div class="bttn_block"><input type="button" value="Step" name="step1" id="step1" onClick="mystep(0);" class="action" /></div>
      </div>
      <div id="btn-bar">
        <br /><input type="button" value="Exit" onClick="google.script.host.close();" class="green" />
      </div>
    </div>
  </form>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
    </script>
    <script>
    var idx=1;
    var myInterval='';
      $(function() {
        $('#startTimer').click(startmytimer);
        $('#stopTimer').click(stopTimer);
        $('#txt4').val('');
        $('#txt3').val('');
        $('#txt2').val(10);
        $('#txt1').val(5);
        google.script.run
           .withSuccessHandler(setTotal)
           .getTotalSheets();
      });

      function showSheet()
      {
        var maxidx = $('#txt1').val();
        if(idx>maxidx)idx=1;
        if(idx<=maxidx && idx>0)
        {
          google.script.run
            .withSuccessHandler(showStatus)
            .showSheet(idx);     
          idx += 1;
        }
      }

      function showStatus(r)   
      {
        if(r[0]>-1)
        {
          $('#txt3').val(r[0]);
          $('#txt4').val(r[1]);
        }
        else
        {
          $('#txt3').val('');
          $('#txt4').val(r[1]);
        }
      }

      function startmytimer()
      {
        showSheet();
        myInterval=setInterval(showSheet, Number($('#txt2').val())*1000);
        google.script.run.displayToast('Timer Started','Script Status', 5);
      }

      function stopTimer()
      {
        if(myInterval)
        {
          clearInterval(myInterval);
          google.script.run.displayToast('Timer Stopped','Script Status', 5);
        }
        else
        {
          google.script.run.displayToast('myInterval not set.','Script Status', 5);
        }
      }

      function loadTxt(from,to)
      {

          document.getElementById(to).value = document.getElementById(from).value;
      }

      function mystep(d)
      {
        idx+=d;
        showSheet();
      }

      function setTotal(n)
      {
        var s = '<select id="sel2" onChange="loadTxt(\'sel2\',\'txt1\');">';
        var n = (typeof(n)!='undefined')?n:0;
        var sel = $('#txt1').val();
        if(n>0)
        {

          for(var i=1;i<=n;i++)
          {
             var sltd = (i!=sel)?'':' selected'; 
             s+='<option value="' + i + '"' + sltd + '>' + i + '</option>';
          }
          s+='</select>';
          var el = document.getElementById('shtsinfo1').innerHTML += s;
          $('#txt1').val(sel);
        }
      }

     console.log('My Code');
   </script>
  </body>
</html>

SheetShow.gs:

function showSheet(idx)
{
  var idx = (typeof(idx)!='undefined')?idx:1;
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  if(idx>0 && idx<=sheets.length)
  {
    var sht=sheets[idx-1];
    sht.activate();
    var r = [idx,sht.getName()];
    return r;
  }
  else
  {
    var r = [-1,'Index out of range.'];
    return r;
  }
}

function SheetShowSidebar()
{
  var ui = HtmlService.createHtmlOutputFromFile('SheetShowDialog').setTitle('Sheet Show Info:');
  SpreadsheetApp.getUi().showSidebar(ui);
}

function displayToast(msg,title,timeoutSeconds)
{
  SpreadsheetApp.getActiveSpreadsheet().toast(msg, title, timeoutSeconds)
}

function getTotalSheets()
{
  return SpreadsheetApp.getActiveSpreadsheet().getSheets().length;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...