2015-04-21 4 views
0

У меня в настоящее время есть некоторые проблемы, я новичок (в лучшем случае), когда дело доходит до листов Google, тем более со сценарием.Google Таблицы Помощник Visiblesheets

я в настоящее время -

// 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 есть несколько инструментов поиска и даже больше баз данных. Это «получает таблицы» и отображает «скрытые» и/или «защищенные» листы в своем списке, которые другие пользователи не имеют доступа.

В любом случае я могу ограничить доступ ко всем «видимым» листам? и тогда он будет игнорировать скрытые/защищенные? Или даже если он просто отобразит список видимых и игнорируемых скрытых. Я могу жить со скрытыми защищенными листами :)

К сожалению, из-за характера моих функций поиска я не могу попробовать это без какого-либо доступа к редактированию. Так что моя дилемма: у меня на самом деле нет большого количества проб и ошибок за пределами работы.

Благодаря

Любая помощь очень ценится как всегда.

ответ

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, но я думаю, что это то, что нужно, и, возможно, я положил его в правую место.

EDIT НИЖЕ ЭТОЙ ЛИНИИ

Я проверил мой код, и я заметил, что все еще создает пространство для кнопок, которые не были там. Поэтому вместо создания таблицы сразу. Я просто нажал имена в массив и добавил еще один цикл.

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

Спасибо Munkey :) Я начал смотреть рекомендованный канал Youtube, чтобы изучить Excel, Excelisfun (не совсем) :) Спасибо за вашу помощь. Сценарий работал так, как я хотел. Теперь просто нужно перепроектировать его, чтобы узнать его :) – McSheehy

+0

@McSheehy Прежде всего, чтобы быть понятным, это Goggle Sheets и Javascript, с которыми я вам помог. Не excel и VBA. Хотя некоторые формулы переводится с excel на google. Я не уверен, что VBA переводит прямо в Javascript. Если вы хотите изучить базовый Javascript, попробуйте codeacademy.com – Munkey

Смежные вопросы