2014-01-10 56 views
1

我有一個電子表格,其中包含6列電子郵件地址,可根據用戶輸入和年齡自動更新。每列對應於不同的Google羣組。根據Google電子表格中的動態電子郵件地址列表自動更新Google組成員資格

我想根據每個電子表格列中的動態值自動填充Google Group成員資格。例如 - 無論是編輯還是日常計時 - Google腳本都會讀取A列中的電子郵件地址列表並更新相應的Google羣組。

理想情況下,該腳本會調用當前的Google Group成員資格,將其與列A中的電子郵件地址列表進行比較,從該組中刪除任何不再出現在列A中的地址,並向該組添加任何地址出現在A欄中,但目前不在該組中。

這可能是要求太高。或者,我可以想象該腳本刪除了該組中的所有成員,然後將列A中的所有電子郵件地址添加到該組。雖然這將實現同樣的目標(據我所知),但我想知道是否會有一些歷史遺失或類似的副作用來消除所有成員的日常工作。因此,我更喜歡首先描述的比較方法。

在論壇中,我能找到這樣的討論,與塞爾INSAS的答覆:與電子郵件地址 Add emailadress to Spreadsheet, auto add the email to a Google group

當我運行我的腳本編輯器的代碼,替換「[email protected]」我的谷歌集團,我得到以下錯誤:

Service error: : Invalid request URI

與參考到第10行,這是

var group = GroupsManager.getGroup('[email protected]'); 

Getti過去那個錯誤是1個問題。一旦我找到了該錯誤,我需要了解如何將組成員資格與電子表格列表進行比較和/或刪除全部並重新導入全部內容。

對這兩個問題的任何幫助非常感謝!


編輯1(後Mogsdad的確認,我不能用煤氣API更新谷歌集團成員)

好了,所以對我的B計劃是不是黑客攻擊的全能,是因爲我太新手去那裏感覺舒服。 B計劃是編寫一個腳本,將電子表格用戶列表與Google Group用戶列表進行比較,並告訴我需要手動將哪些用戶添加到Google Group用戶列表中或從中刪除。我已經調整了您在鏈接到的帖子中提供的代碼。

function compareGroupMembers() { 
     var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Groups'); 
     var rows = sheet.getDataRange(); 
     var values = rows.getValues(); 
     var sheetUsers = []; 
    Logger.log(values) 

    // Get user list from sheet 
     for (var i = 1; i < values.length; i++) { 
     var row = values[i]; 
     sheetUsers.push(row[0]); // build array of users 
     } 
     Logger.log(sheetUsers) 

    // Get user list from group 
     var group = GroupsApp.getGroupByEmail("[email protected]"); 
     var groupUsers = group.getUsers().join(',').split(','); 
     Logger.log(groupUsers) 

    // Compare user lists and define users to Add and Remove 
    //*****This is where I need direction. This code is just a placeholder.***** 
     var usersToAdd = sheetUsers.uniqueFrom(groupUsers); 
     var usersToRemove = groupUsers.uniqueFrom(sheetUsers); 
     var addErrors = 0; // Counter for exceptions 

    //Then I would like usersToAdd and usersToRemove to be listed in a separate sheet 
    //Because I have six groups, I'm hoping the new sheet can be organized by 
    //Col A is Google Group email 
    //Col B is user email 
    //Col C is "add" or "delete" 

    }; 

是否有可能建立誰是對的輸出,告訴我哪些成員手動添加(即那些圖紙列表上,但不是該組名單)和那些手動刪除(即那些組列表但不在表格列表中)?

此外,我可以使用相同的腳本爲六個不同的組執行相同的操作嗎? (在我的工作表中,組電子郵件地址在第1行,並且成員電子郵件地址在它的正下方,對於所有6列)如果可能,那麼我希望輸出指定用戶必須手動添加到哪個組或從中刪除。

感謝您的幫助!

回答

1

您應該能夠從How to add permission to Google site using spreadsheet?適應代碼,更換Site.getViewersSite.addViewer()Site.removeViewer()DomainGroup.getAllMembers()DomainGroup.addMember()DomainGroup.removeMember()分別與適當調整其他細節。

WRT你的錯誤...確保你沒有混淆組類型。請參閱Domain groups versus Google groups

+0

嗨Mogsdad,感謝提請我注意區域組和Google組之間的區別。我正在處理Google網上論壇。我在你的文章之後做了更多的挖掘,並發現這篇文章:http://stackoverflow.com/questions/3757793/api-for-google-groups。 GOOGLE GROUPS沒有API是真的嗎?這是否意味着我無法使用GAS從Google網上論壇添加或刪除用戶? (我是一個新手,所以感謝您的輔導) – duck

+0

哇,主要無賴:(感謝您的解釋,雖然。我更新了我原來的帖子,請求幫助更簡單的工作(只是想比較兩個列出並報告獨特的值,以便我可以手動更改Google Group成員資格)。謝謝! – duck

+0

快速問題,因爲我依賴於您的最後一句話 - 在線討論似乎表明,在類組中getUser函數只使用gmail.com返回電子郵件地址,並且不返回任何其他人(如yahoo.com或comcast.net)。這是真的嗎?如果是這樣,你能告訴我是否有某種解決方法可以使我檢索該組的所有成員,而不管電子郵件域是什麼?謝謝! – duck

相關問題