Google表格脚本可见表格帮助

时间:2015-04-21 21:35:50

标签: javascript google-apps-script google-sheets

我目前遇到了一些问题,当谈到谷歌表时,我是一个新手(充其量),使用脚本更是如此。

我目前有 -

    // global var
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  showGoToSheet();
}
function showGoToSheet() {
  var app = UiApp.createApplication().setTitle("Please Select Search Tool")
    .setHeight(400).setWidth(450);
  var sPanel = app.createScrollPanel().setAlwaysShowScrollBars(true)
    .setSize(440, 400);
  var vPanel = app.createVerticalPanel().setSize(400, 400);
  var fTable = app.createFlexTable().setCellPadding(5).setSize(400, 400)
    .setCellSpacing(0).setBorderWidth(1); 
  var allsheets = ss.getSheets();   
  var goToSheetClick = app.createServerHandler('handleGoToSheetClick');     
  for (var i=0, iLen=allsheets.length; i<iLen; i++) {
    var sheet_name = allsheets[i].getName();
    fTable.setWidget(i, 0, app.createButton(sheet_name).setId(sheet_name)
      .setWidth(200).addClickHandler(goToSheetClick)); 
  }
  app.add(sPanel.add(vPanel.add(fTable)));
  ss.show(app);
}

function handleGoToSheetClick(e) {
  var app = UiApp.getActiveApplication();  
  ss.getSheetByName(e.parameter.source).activate();
  app.close();   
  return app; 
}

正如你们大多数人所想的那样,这会在打开的纸张上打开一个“弹出窗口”,询问我要去哪张纸。但是,在我的Google表格上,我有几个搜索工具和更多数据库。这个“getsallsheets”并在其列表中显示其他用户无法访问的“隐藏”和/或“受保护”表。

无论如何我可以限制访问所有“可见”表吗?然后它会忽略隐藏/保护?或者即使它只显示一个可见列表并忽略隐藏。我可以隐藏受保护的床单:)

不幸的是,由于我的搜索功能的性质,如果没有某种形式的编辑访问,我无法尝试这一点。所以我的困境是我在工作之外没有多少尝试和错误的设施。

由于

任何帮助都会一如既往地受到赞赏。

1 个答案:

答案 0 :(得分:1)

这是未经测试但可能有效。

        // global var
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  showGoToSheet();
}
function showGoToSheet() {
  var app = UiApp.createApplication().setTitle("Please Select Search Tool")
    .setHeight(400).setWidth(450);
  var sPanel = app.createScrollPanel().setAlwaysShowScrollBars(true)
    .setSize(440, 400);
  var vPanel = app.createVerticalPanel().setSize(400, 400);
  var fTable = app.createFlexTable().setCellPadding(5).setSize(400, 400)
    .setCellSpacing(0).setBorderWidth(1); 
  var allsheets = ss.getSheets();   
  var goToSheetClick = app.createServerHandler('handleGoToSheetClick');     
  for (var i=0, iLen=allsheets.length; i<iLen; i++) {

    if(allsheets[i].isSheetHidden()!= true){
    var sheet_name = allsheets[i].getName();
    fTable.setWidget(i, 0, app.createButton(sheet_name).setId(sheet_name)
      .setWidth(200).addClickHandler(goToSheetClick)); 
  }
  app.add(sPanel.add(vPanel.add(fTable)));
  ss.show(app);
  }
}

function handleGoToSheetClick(e) {
  var app = UiApp.getActiveApplication();  
  ss.getSheetByName(e.parameter.source).activate();
  app.close();   
  return app; 
}

我刚将这部分添加到循环中

if(allsheets[i].isSheetHidden()!= true)

我从未使用isSheetHidden功能,但我认为这是我们所需要的,而且我可能已将它放在正确的位置。

编辑此线以下

我测试了我的代码,我注意到它仍然为不存在的按钮创建空间。所以不要马上创建表。我只是将名称推入数组并添加了另一个循环。

        // global var
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  showGoToSheet();
}
function showGoToSheet() {
  var app = UiApp.createApplication().setTitle("Please Select Search Tool")
    .setHeight(400).setWidth(450);
  var sPanel = app.createScrollPanel().setAlwaysShowScrollBars(true)
    .setSize(440, 400);
  var vPanel = app.createVerticalPanel().setSize(400, 400);
  var fTable = app.createFlexTable().setCellPadding(5).setSize(400, 400)
    .setCellSpacing(0).setBorderWidth(1); 
  var allsheets = ss.getSheets();   
  var goToSheetClick = app.createServerHandler('handleGoToSheetClick');     
 var visSheet = [];
  for (var i=0; i<allsheets.length; i++) {

    if(allsheets[i].isSheetHidden()!= true){
      visSheet.push(allsheets[i].getName())}
  }

    for (var x =0;x<visSheet.length;x++){
    var sheet_name = visSheet[x];
    fTable.setWidget(x, 0, app.createButton(sheet_name).setId(sheet_name)
      .setWidth(200).addClickHandler(goToSheetClick)); 
    }
  app.add(sPanel.add(vPanel.add(fTable)));
  ss.show(app);

}

function handleGoToSheetClick(e) {
  var app = UiApp.getActiveApplication();  
  ss.getSheetByName(e.parameter.source).activate();
  app.close();   
  return app; 
}

原始代码的唯一真正更改是此部分。

 var visSheet = [];
  for (var i=0; i<allsheets.length; i++) {

    if(allsheets[i].isSheetHidden()!= true){
      visSheet.push(allsheets[i].getName())}
  }

    for (var x =0;x<visSheet.length;x++){
    var sheet_name = visSheet[x];
    fTable.setWidget(x, 0, app.createButton(sheet_name).setId(sheet_name)