【问题标题】:Google Sheets Script hideSheet() , Sheet not hiddenGoogle 表格脚本 hideSheet() ,表格未隐藏
【发布时间】:2021-11-20 06:37:57
【问题描述】:

试图复制隐藏的模板,使其显示出来,但在复制后再次隐藏。

hideSheet() 功能不起作用。有任何想法吗?

function googleQuiz(){

//Duplicate Sheet 
  var ss =SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.setActiveSheet(ss.getSheetByName('QuizFormTPlate'));
  ss.duplicateActiveSheet();
  sheet.hideSheet();
//Rename sheet
  var dSheet = ss.setActiveSheet(ss.getSheetByName('Copy of QuizFormTPlate'));
  var date = new Date();
  var tz = ss.getSpreadsheetTimeZone();
  var marksDate = Utilities.formatDate(date, tz, 'dd-MMM');
  var name = "G-Quiz ".concat(marksDate);
  dSheet.setName(name);
//Insert Cell 
  var cell = dSheet.getRange("C2");
  cell.setValue('Formative');
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    其实是“showSheet()” 这对我有用:

    var spreadsheet = SpreadsheetApp.getActive();
    var sheetTemplate = spreadsheet.getSheetByName('Template');
    sheetTemplate.showSheet();
    //do something...
    sheetTemplate.hideSheet();
    

    因为如果工作表已经隐藏,则 hideSheet() 无效:

    https://developers.google.com/apps-script/reference/spreadsheet/sheet#hidesheet

    首先显示隐藏的工作表应该可以解决问题:

    https://developers.google.com/apps-script/reference/spreadsheet/sheet#showsheet

    【讨论】:

      【解决方案2】:

      这是复制工作表并将其隐藏的替代解决方案

      function googleQuiz(){
      
      //Duplicate Sheet 
        var ss =SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName('QuizFormTPlate');
        var dSheet = sheet.copyTo(SpreadsheetApp.openById(ss.getId()))
        dSheet.showSheet()
      //Rename sheet
        var date = new Date();
        var tz = ss.getSpreadsheetTimeZone();
        var marksDate = Utilities.formatDate(date, tz, 'dd-MMM');
        var name = "G-Quiz ".concat(marksDate);
        dSheet.setName(name);
      //Insert Cell 
        var cell = dSheet.getRange("C2");
        cell.setValue('Formative');
      }
      

      基本上,而不是您使用电子表格对象的duplicateActiveSheet() 函数。您可以使用工作表对象的copyTo() 函数并将其与当前电子表格一起提供。 sheet.copyTo(SpreadsheetApp.openById(ss.getId()))。 并直接将新的 sheet 对象传递给var dSheet 使其可见并重命名。

      【讨论】:

      • 嗨,这确实可以隐藏原始工作表,但是如果您能提供帮助,有两个问题。一是新工作表不会自动显示给用户。二,我有多个未复制的交替颜色格式。我确实喜欢新工作表作为新的最后一个选项卡出现。
      • 使用ss.setActiveSheet(ss.getSheetByName('Copy of QuizFormTPlate')); 而不是dSheet.showSheet() 让工作表直接出现在用户面前。如果您有任何想法,格式化仍然是一个问题?
      • 你能分享一个模板表来试试吗?我最后的代码似乎按预期工作。
      • 我想这是因为我有多种交替的颜色。我最终坚持使用duplicate,因为它将下一张表放在任何以前的副本前面,而不是放在工作簿的末尾。我还添加了if(sheet.isSheetHidden==false){sheet.hideSheet}
      【解决方案3】:

      看来问题是由在隐藏工作表上使用 setActiveSpreadSheet 引起的,如果您在 ss.setActiveSpreadsheet(ss.getSheetByName('QuizFormTPlate')); 之前调用 ss.getSheetByName('QuizFormTPlate').showSheet();,则之后对 hideSheet() 的调用将正常工作。在此处发布此内容,以便其他遇到此问题的人只需添加 .showSheet() 而无需重新编写整个代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多