Google Sheets 脚本 visiblesheets 帮助
Google Sheets Script visiblesheets assistance
我目前遇到了一些问题,就 google sheet 而言,我(充其量)是个新手,脚本方面更是如此。
我目前有 -
// 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;
}
你们大多数人都知道,这会在 sheet 上打开一个 "popup",问我 sheet 我想去哪里。然而,在我的 Google Sheet 上,我有几个搜索工具和更多的数据库。此 "getsallsheets" 并在其他用户无法访问的列表中显示 "hidden" and/or "protected" sheet。
我是否可以限制对所有 "visible" sheet 的访问?然后它会忽略 hidden/protected?或者即使它只会显示可见列表而忽略隐藏列表。我可以忍受隐藏我受保护的 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++) {
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
功能,但我认为这是需要的,可能我已将其放在正确的位置。
在此行下方编辑
我测试了我的代码,发现它仍在为不存在的按钮创建空间。因此,不要立即创建 table。我刚刚将名称推入数组并添加了另一个循环。
// 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)
我目前遇到了一些问题,就 google sheet 而言,我(充其量)是个新手,脚本方面更是如此。
我目前有 -
// 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;
}
你们大多数人都知道,这会在 sheet 上打开一个 "popup",问我 sheet 我想去哪里。然而,在我的 Google Sheet 上,我有几个搜索工具和更多的数据库。此 "getsallsheets" 并在其他用户无法访问的列表中显示 "hidden" and/or "protected" sheet。
我是否可以限制对所有 "visible" sheet 的访问?然后它会忽略 hidden/protected?或者即使它只会显示可见列表而忽略隐藏列表。我可以忍受隐藏我受保护的 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++) {
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
功能,但我认为这是需要的,可能我已将其放在正确的位置。
在此行下方编辑
我测试了我的代码,发现它仍在为不存在的按钮创建空间。因此,不要立即创建 table。我刚刚将名称推入数组并添加了另一个循环。
// 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)