2016-11-15 28 views
0

希望這是一個相當簡單的問題!如何執行谷歌腳本作爲用戶無法查看的電子表格的「所有者」

我製作了一個Google腳本,它寫入單獨的工作表「MasterSheet」中的單元格中(由以下幾個有用的Q &提供幫助)。這將最終被嵌入到我爲個人用戶提供的多個不同工作表中。

當用戶對「MasterSheet」有編輯權限時,它可以很好地工作,但我需要保持私密 - 即使除我以外的任何人都看不到。

作爲背景:在每個'用戶表'中,IMPORTRANGE用於從允許該用戶查看的'MasterSheet'中導入列,然後腳本允許用戶向MasterSheet添加註釋。 我可以查看MasterSheet以查看來自各個用戶在一張統一工作表上的評論的所有列,但個別用戶應該無法查看此列。

寫在紙張上的特定的腳本是很普通的:

function saveCommentToMasterSheet(form){ 
    var company = form.company, 
     contact = form.contactselect, 
     comment = form.message , 
     ss = SpreadsheetApp.openById("MASTERSHEET_ID").getSheetByName('MasterSheet'); 
    if(company=="all"){ 
    var row = findCell(contact); 
    } else { 
     var row = findCell2(contact,company); 
    } 
    //^The above finds the specific row number relating to the entry the user wants to comment on. 
    var cell2 = ss.getRange(row,11); 
    // ^In this case '11' is the column related to this sheet's specific user, I've made separate sheets for each user that are identical except this column number 
    cell2.setValue(comment); 
} 

我相信我可以做MasterSheet編輯與此鏈接的人,但我寧願避免這種情況,尤其是在腳本嵌入到每個電子表格中,所以如果用戶只是看着它,他們會發現MasterSheet ID。

我知道使用執行API可以像我一樣運行腳本,但如果我誠實地說,我會努力一點,以弄清楚這個工作。

對不起,如果我問一個簡單的問題 - 我已經給它一個很好的搜索,並無法弄清楚。

非常感謝! Alex

N.B.這Running a google script from within a spreadsheet, but as a different user?看起來像一個類似的問題,但我真的想保持評論系統在用戶的電子表格。

+0

將'doPost(e)'函數放入綁定到主電子表格的項目中。然後將該腳本作爲Web App發佈。將原始函數保留在將分發給用戶的電子表格中,但保留將要去除的所有當前代碼,並將其放入綁定到主電子表格的項目中的函數中。目前將數據寫入主電子表格的當前函數不會直接做到這一點。分佈式電子表格中的當前函數將調用主電子表格中的'doGet(e)'函數,併發送數據,這些數據將在'e'中。 –

回答

1

你可以做一個POST請求,以便從電子表格中的主電子表格分發給用戶:

Apps Script Documentation - UrlFetchApp.fetch()

function saveCommentToMasterSheet(form) {//Function in the 
    //spreadsheets distributed to the users 
    var options,responseCode,url; 

    url = "https://script.google.com/macros/s/File_ID/exec";//Get from publishing 

    options = {}; 
    options.method = 'post'; 
    options.payload = form; 

    responseCode = UrlFetchApp.fetch(url, options).getResponseCode(); 

    Logger.log('responseCode: ' + responseCode);//View the Logs 
}; 

上面的代碼將觸發主電子表格的doPost(e)功能,並把數據放入事件對象e

然後,您可以從e中獲取數據,並將數據直接寫入活動電子表格(這是主電子表格)。發佈Web App作爲「我」運行。

發佈的Web App有兩種版本; 「dev」版本和「exec」版本。 「dev」版本總是與最新的變化一起存在,但不應該在生產中使用。每次您再次發佈腳本時,「exec」版本都會有一個新版本。要在生產中使用最新的「exec」版本,您必須不斷髮布最新的代碼。

+0

非常感謝 - 做到了。當我將用戶標識號添加到表單有效內容時,它也有助於簡化它。 對於任何人閱讀 - 這花了我比我應該更長的時間,因爲我沒有意識到你必須發佈新版本的Web應用程序(而不僅僅是更新當前的版本)以更新表格。 – glynnder

+0

謝謝你讓我知道你的工作。我更新了答案以解釋「exec」版本。 –

相關問題