2017-03-07 26 views
0

我有下面的代碼,它允許用戶編輯添加到保護範圍:允許非所有者運行更改Google表格中保護設置的腳本?

function addManager() { 
    var ss = SpreadsheetApp.getActive(); 
    var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE); 
    var managerEmail= Browser.inputBox("Enter new manager's email address: "); 
    for (var i = 0; i < protections.length; i++) { 
    var protection = protections[i]; 
    protection.addEditor(managerEmail); 
    } 
    Browser.msgBox("Access Granted To "+managerEmail) 
    } 

然而,當這不是一個所有者的任何用戶試圖運行代碼,他們得到一個錯誤信息說他們沒有允許編輯保護(由所有者設置)。

如何我: 1.總是運行代碼的所有者或者 2.授予訪問非業主編輯保護範圍(由業主設定)

任何線索/幫助將不勝感激! !

回答

0

這個函數是如何被調用的?最近我用一個我試圖製作的電子表格來解決這個問題。我得出結論,因爲用戶沒有權限,他們將無法更改權限。

我使用的工作是一個onOpen觸發器功能。觸發器功能將只作爲工作表的所有者運行,以允許您設置權限。唯一要記住的是觸發器只有三種類型。 onOpenonEdit/onChange(非常相似)。意味着這些觸發器是唯一可以通過腳本更改權限的時間。

我最終放棄了這種方法,因爲我觸發onOpen觸發器的問題是,如果有人在工作表中工作,並且有新用戶進入工作表,它將更改新用戶的權限並弄亂第一個問題用戶在做。根據您的腳本,這可能不是問題,但我最終做了一個HTML Web應用程序作爲用戶界面以避免用戶之間的干擾。帶有數據的Google表格位於後端。

但無論如何,這裏是一個例子,你如何用觸發器打開函數。

運行此函數將安裝自定義觸發器。您還可以在腳本編輯器的資源選項卡中管理觸發器。

function InstallTrigger(){ 
    var sheet = SpreadsheetApp.getActive(); 
ScriptApp.newTrigger('addManager').forSpreadsheet(sheet).onOpen().create(); 
} 

觸發將調用open函數:

function addManager() { 
    var ss = SpreadsheetApp.getActive(); 
    var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE); 
    var managerEmail= Browser.inputBox("Enter new manager's email address: "); 
    for (var i = 0; i < protections.length; i++) { 
    var protection = protections[i]; 
    protection.addEditor(managerEmail); 
    } 
    Browser.msgBox("Access Granted To "+managerEmail) 
} 
相關問題