我目前遇到了一些问题,当谈到谷歌表时,我是一个新手(充其量),使用脚本更是如此。
我目前有 -
// 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”并在其列表中显示其他用户无法访问的“隐藏”和/或“受保护”表。
无论如何我可以限制访问所有“可见”表吗?然后它会忽略隐藏/保护?或者即使它只显示一个可见列表并忽略隐藏。我可以隐藏受保护的床单:)
不幸的是,由于我的搜索功能的性质,如果没有某种形式的编辑访问,我无法尝试这一点。所以我的困境是我在工作之外没有多少尝试和错误的设施。
由于
任何帮助都会一如既往地受到赞赏。
答案 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)