Я пытаюсь создать простую кнопку веб-приложения, которая будет дублировать лист в листах Google, я создал кнопку в HTML и связал ее, чтобы запустить код при нажатии! но это не похоже на работу! Может кто-нибудь сказать мне, что я сделал не так?

<!DOCTYPE html>
<html>
 <head>
  <base target="_top">
 </head>
  <body>
  <button id="btn">Create</button> 
<script>
  document.getElementById("btn").addEventListener("click",doStuff);
  function doStuff(){
    google.script.run.userClicked();
  }
</script>
 </body>
  </html>

А вот код для дублирования:

function doGet() {
  return HtmlService.createHtmlOutputFromFile('page');
 }

   function userClicked() {
     SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet();
     var myValue = SpreadsheetApp.getActiveSheet().getRange("M1").getDisplayValue();
     SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet("Daily Report " + myValue);
   }
0
Aboude zoua 16 Ноя 2019 в 01:26

2 ответа

Лучший ответ

Копирование и удаление таблиц из веб-приложения

Code.gs :

function dupSheet(dObj) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.setActiveSheet(ss.getSheetByName(dObj.name));
  ss.duplicateActiveSheet();
  var name="Daily Report " + sh.getRange("A1").getDisplayValue();
  if(!sheetExists(name)) {
    ss.renameActiveSheet("Daily Report " + sh.getRange("A1").getDisplayValue());
  }
  dObj['sA']=getSheetNames().sA;
  return dObj;
}

function getSheetNames() {
  var ss=SpreadsheetApp.getActive();
  var shts=ss.getSheets();
  var sObj={sA:[]};
  shts.forEach(function(sh){
    sObj.sA.push(sh.getName());
  })
  return sObj;
}

function doGet() {
  return HtmlService.createHtmlOutputFromFile('dup');
}

function delSheet(dObj) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(dObj.name);
  ss.deleteSheet(sh);
  dObj['sA']=getSheetNames().sA;
  return dObj;
}

function sheetExists(name) {
  var ss=SpreadsheetApp.getActive();
  var sA=ss.getSheets();
  for(var i=0;i<sA.length;i++) {
    if(name==sA[i].getName()) {
      return true
    }
  }
  return false;
}

Dup.html :

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script>
    $(function(){
      google.script.run
      .withSuccessHandler(function(sObj){
        var select=document.getElementById('sel1');      
        sObj.sA.unshift('Please Select A File Name');
        select.options.length=0;
        for(var i=0;i<sObj.sA.length;i++) {
          select.options[i]=new Option(sObj.sA[i],sObj.sA[i]);
        }
      })
      .getSheetNames();

    });
    function dupSheet() {
      $("#sel1").css('background-color','#ffff00');
      google.script.run
      .withSuccessHandler(function(rObj){
        $('#sel1').css('background-color','#ffffff');
        var select=document.getElementById('sel1');      
        rObj.sA.unshift('Please Select A File Name');
        select.options.length=0;
        for(var i=0;i<rObj.sA.length;i++) {
          select.options[i]=new Option(rObj.sA[i],rObj.sA[i]);
        }
      })
      .dupSheet({name:$('#sel1').val()});
    }
    function delSheet() {
      $("#sel1").css('background-color','#ffff00');
      google.script.run
      .withSuccessHandler(function(rObj){
        $('#sel1').css('background-color','#ffffff');
        var select=document.getElementById('sel1');      
        rObj.sA.unshift('Please Select A File Name');
        select.options.length=0;
        for(var i=0;i<rObj.sA.length;i++) {
          select.options[i]=new Option(rObj.sA[i],rObj.sA[i]);
        }
      })
      .delSheet({name:$('#sel1').val()});
    }
  </script>
  <style>
  input{margin:2px 5px;}
  </style>
  </head>
  <body>
    <select id="sel1"></select><label for="sel1">Sheet Name</label>
    <br /><input type="button" value="Duplicate Sheet" onClick="dupSheet();" />
    <br /><input type="button" value="Delete Sheet" onClick="delSheet();" />
  </body>
</html>

Я тоже использовал немного JQuery.

0
Cooper 16 Ноя 2019 в 04:47

Как указано в SpreadsheetApp ссылка.

< Сильный > getActiveSheet ( )

Получает активный лист в электронной таблице. Активный лист в электронной таблице - это лист, который отображается в пользовательском интерфейсе электронной таблицы.

Поскольку вы не используете какой-либо пользовательский интерфейс, вам следует использовать другие методы доступа к своим таблицам и таблицам, такие как:

Получение вашей электронной таблицы

Получение ваших листов

0
carlesgg97 18 Ноя 2019 в 10:32