gpt4 book ai didi

javascript - Google Sheets 脚本visiblesheets 帮助

转载 作者:行者123 更新时间:2023-12-03 10:17:47 25 4
gpt4 key购买 nike

我目前遇到了一些问题,对于 Google 表格,我是一个新手(充其量),对于脚本来说更是如此。

我目前有 -

    // 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 Sheet 上,我有几个搜索工具,甚至更多的数据库。此“获取所有工作表”并在其列表中显示其他用户无法访问的“隐藏”和/或“ protected ”工作表。

我是否可以限制对所有“可见”工作表的访问?然后它会忽略隐藏/ protected ?或者即使它只会显示可见列表并忽略隐藏。我可以忍受隐藏 protected 床单:)

不幸的是,由于我的搜索功能的性质,如果没有某种形式的编辑访问权限,我无法尝试此功能。所以我的困境是我在工作之外并没有太多的尝试和错误的能力。

谢谢

一如既往,我们非常感谢任何帮助。

最佳答案

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

        // 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)

关于javascript - Google Sheets 脚本visiblesheets 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com