首页 > 解决方案 > GSheet - 确保除了一张之外的所有工作表都被隐藏

问题描述

我正在 GSheet 中开发一个成绩簿程序,但遇到了一个新问题。我需要隐藏除“学生报告”表之外的所有工作表,然后将其 pdf 并通过电子邮件发送。它工作得很好,直到我收到报告说脚本没有完成隐藏工作表,然后继续制作 pdf。我加入了“睡眠”,但希望采取更主动的方法。

我想出了这个想法,但它只是超时。我希望有一个do-while循环,不断检查工作表的隐藏属性......一旦除了一个之外的所有东西都被隐藏(即学生报告)......它应该继续。任何帮助,将不胜感激。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetName = "Student Report";

for(var i=0;i<sheets.length; i++){
if(sheets[i].getName()!=sheetName){
  sheets[i].hideSheet();
  }}
 var StudentReport = ss.getSheetByName("Student Report");
 ss.setActiveSheet(StudentReport);
 do {

 for (var k=0;k<sheets.length;k++){   
      var CountVisible = sheets.length;
    if(sheets[k].isSheetHidden()){
        CountVisible = CountVisible -1;
        Logger.log(CountVisible);
       }} 

  } while (CountVisible!=0);
//added wait time to esnure all sheets are properly hidden before next step
// Utilities.sleep(400);

或者,如果有人知道如何只 pdf 一张纸……那会很好地解决问题。

标签: google-apps-scriptgoogle-sheets

解决方案


这应该足以隐藏除一张之外的所有内容。

function hideAllSheetsExceptThisOne(sheetName) {
  var sheetName=sh||'Student Report';//default for testing
  var ss = SpreadsheetApp.getActive();
  var sheets=ss.getSheets();
  for(var i=0;i<sheets.length; i++){
    if(sheets[i].getName()!=sheetName){
      sheets[i].hideSheet();
    }
  }
  SpreadsheetApp.flush();
} 

推荐阅读