![](/img/trans.png)
[英]Google App Script - How to allow other users edit only-me-protected cell through script?
[英]How to allow users to edit protected range through script?
我有一個帶有受保護范圍的工作表,其權限設置為僅允許我對其進行編輯。 我在工作表的腳本中有一個功能,可以編輯受保護范圍內的單元格。 我裝配了該功能以在編輯時觸發,這允許除我自己以外的其他用戶成功運行該功能,因為該功能使用我的權限運行。
因此,這種情況很好,但我想通過在函數運行時顯示加載消息來使事情復雜化。 為此,我創建了以下html文件:
<script>
function onSuccess() {
google.script.host.close();
}
function onFailure() {
var div = document.getElementById('result');
div.innerHTML = '<div>Data failed to load.</div>';
}
google.script.run.withSuccessHandler(onSuccess).withFailureHandler(onFailure).process();
</script>
<div id='result'><img src="https://c4a54d10381f750e81dcc323aed21e2c95725815.googledrive.com/host/0Bwyqwd2fAHMMallsNkNOV0RfcTg/wait_progress.gif"></div>
當on edit事件觸發以下功能時,將顯示html:
function refresh() {
var html = HtmlService.createHtmlOutputFromFile('loading').setSandboxMode(HtmlService.SandboxMode.IFRAME).setWidth(100).setHeight(100);
SpreadsheetApp.getUi().showModalDialog(html, 'Processing...');
}
用戶收到一條錯誤消息,指出他/她無法編輯受保護的單元格。 我認為發生這種情況是因為refresh()函數使用我的權限運行,而process()函數使用他/她的權限運行。 關於如何使這項工作對我有任何想法?
編輯-我試圖使用以下代碼來解決我的問題:
function refresh() {
setPermission(1);
SpreadsheetApp.flush();
var html = HtmlService.createHtmlOutputFromFile('loading').setSandboxMode(HtmlService.SandboxMode.IFRAME).setWidth(100).setHeight(100);
SpreadsheetApp.getUi().showModalDialog(html, 'Processing...');
SpreadsheetApp.flush();
setPermission(0);
}
function setPermission(flag)
{
var me = Session.getActiveUser();
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
var protection = protections[0];
if (flag == 1)
{
protection.addEditor(me);
} else {
protection.removeEditor(me);
}
}
它開始工作是因為process()函數確實更改了受保護范圍內的某些單元格,但隨后出現了相同的錯誤,提示用戶無法編輯受保護范圍。 我相信這是因為showModalDialog不會暫停腳本,因此在process()可以完成用戶對受保護范圍進行編輯的權限之前,就將其刪除。
有兩種方法可以做到這一點。
1)如果您知道如何手動執行oauth調用(有一個oauth2應用程序腳本庫可以提供幫助),則可以保存您的帳戶刷新令牌,並使用該令牌以您的名字(通過urlFetch)進行工作表api調用。
2)發布另一個以您的名字運行且匿名的腳本,該腳本通過接收url參數進行更改。 使用urlFetch從原始腳本中調用該腳本。 這更容易編寫(1),但可能會使我變慢。
如果您對urlFetch或其他api有權限問題,則可能還需要使用在onEditTrigger上安裝的自定義項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.