2012-07-09 26 views
0

我需要大量的幫助,但我認爲這是一個對未來其他綠色程序員有幫助的程序。如何在Google Apps腳本中創建以逗號分隔的字符串

我有一個Google表單供人填寫,這是我們社區的新功能。很明顯,它提供了Google文檔電子表格。 (這裏的工作表的副本,這只是編輯的鏈接黑掉一些個人資料:

https://docs.google.com/spreadsheet/ccc?key=0AjsoIob8dJfodG9WN0ZmWUE1ek9rc3JrVFpDQ0J0OGc

其中一個問題是我們組的您有興趣加盟。表格提出問題,然後允許用戶檢查新成員有興趣加入的約10個組中的哪一組。然後將數據輸入到工作表中,列出新成員想要加入單個單元格中的所有組(即F列)。

的管理任務,我現在需要解決正在經歷所有響應,拉出誰說過成員 - 例如 - 在加入「援手」的組噹噹感興趣,複製他們的電子郵件地址(位於X欄),並將其粘貼到該組的Google Groups註冊表中。

這是可以理解的單調乏味。特別是因爲 - 再次 - 我們有大約15個需要填充的Google網上論壇列表。

如果我可以編寫一個小的Google Apps腳本,它會瀏覽表單中的數據,並給我一個以逗號分隔的符合正確標準的所有電子郵件地址列表,這樣才能讓我只需將其複製並粘貼到Google羣組註冊頁面即可。

用簡單的英語,正則表達式應該這樣說: - IF列F包含援手 - 如果G列不包含有 - 那麼列X的內容添加到導出的字符串,然後由 - 對錶格中的每一行重複。

所以這裏的問題: 1)我該怎麼做? 2)如何觸發?

對於第一步,我已經確定了以下正則表達式將會給我我需要什麼:

/(^ |)手相牽($ |)/

我但我不確定如何擴大這一點,但要包括第二個必需的IF聲明。我也不知道如何編寫THEN語句。而且 - 正如我上面所說 - 我不知道如何觸發所有這些。

在此先感謝任何可以幫助的人! Sewickley的新人也感謝你!請讓我知道,如果我能清除任何東西。

回答

0

看起來你很高興復制粘貼電子郵件地址列表,如果你以逗號分隔的格式獲取它。所以你可以在需要時自己觸發它。 您可以使用此代碼段

var options = ['Helping Hands','Book Club',...]; // Add all 10 options here 
var GROUPS_COL = 5 ; //Column F 
var COLG = 6; 
var EMAIL_COL = 23 ; //Column X 
var emailList = ['', '','',''...] ; // 10 blanks 

var data = SpreadsheetApp.openById('ID_HERE').getSheetByName('SheetName').getvalues(); 
for (var i = 1; i < data.length ; i++){ 
    for(var j = 0 ; j < options.length ; j++){ 
    if (data[i][GROUPS_COL].indexOf(options[j]) != -1 && 
     data[i][COLG] != 'Yes') { 
     // The entry in row i+1 has checked option[j] 
     if (emailList[j] != ''){ 
     emailList[j] += ',' ; // Add your comma 
     } 
     emailList[j] += data[i][EMAIL_COL]; 
    } 
    } 
} 

/* Now you have your comma separated list in emailList */ 
for (var i = 0 ; i < 10; i ++){ 
    Logger.log(option[i] + ':' + emailList[i]) 
} 

很明顯,你必須調整這個代碼,以滿足您的需求,但會給你的如何進行一個公平的想法。該代碼尚未經過測試。

+0

嗨,@Srik。感謝您的幫助。首先,您發佈的代碼似乎沒有考慮到列G,該列旨在讓我排除我已經添加到Google羣組列表中的行。我將如何修改你必須做的事情?其次,我得到了一個snytax錯誤(var i = 0; i <10; i ++)。再次感謝! – doebtown 2012-07-09 17:19:07

+1

查看編輯後的代碼。如果您仍然有困難,請嘗試一些時間進行初級調試。 – Srik 2012-07-09 17:40:12

+0

嗨,斯里克。再次感謝你的幫助。我無法回答自己的問題,因此感到沮喪。但是 - 相信我 - 如果我明白你的代碼在做什麼,我很樂意自己調試它。不過,由於我有點迷路,因爲發生了什麼事情,即使它是基本的,我也無法調試。也許我在我的腦海裏,應該堅持我所知道的。 。 。這就是說,既然你已經幫助了我很多,也許你會和我一起進一步。當我運行時,我得到:「TypeError:無法找到對象Sheet中的函數getvalues(第9行)」我不知道現在該去哪裏。 – doebtown 2012-07-09 18:31:49

1

你爲什麼不更進一步,設立了關於表單提交觸發器,讀取組,並增加了他們使用自動的(尚未實驗)Groups Services,Apps Script的?

這樣的腳本不是很難實現,也許你應該檢查user guidestutorials

+0

等一下! - 這將是理想的!但是我沒有在Groups Service中看到一個讓我添加用戶的類。我看到了我可以測試和查詢用戶是否已經在組中的位置(例如hasUser)。但我沒有看到setUser,這是我真正需要的。我錯過了什麼嗎? – doebtown 2012-07-19 00:39:03

+0

真的嗎?我感到羞恥!我從來沒有想過他們會這樣做。這確實需要[問題跟蹤器]上的增強請求(http://code.google。com/p/google-apps-script-issues/issues/list) – 2012-07-19 05:21:24

+0

Henrique Abreu,你在搞我嗎? Google對於如何讓用戶添加到Google網上論壇非常敏感。他們說,垃圾郵件發送者很容易使用它。我覺得沒有setUser或者AddUser類,但我並不感到驚訝,因爲它會讓用戶過於簡單。有人知道我沒有的東西嗎? – doebtown 2012-07-20 02:08:53

0

你不知道如何令人難以置信激起我這終於研究出了。感謝@Sirik,感謝他們堅持使用它,編寫代碼並幫助我進行調試。它確實做到了我想要的東西,它是世界上最酷的東西,使它完全符合我的期望。

爲後人或其他人誰可能希望做類似的東西,我是做什麼的緣故,這裏的確切的代碼,所有的理順,爲實施。你會看到,我在結尾加上短短額外的比特到日誌通過電子郵件發送給我,給我一個對話框,確認腳本已經運行(我不喜歡點擊按鈕,並沒有看到這樣的感覺有事情發生)。

function Export_Groups_List() { 

var options = ['1 & 2 Year Olds\' Playgroup','3 & 4 Year Olds\' Playgroup','Babies\' Playgroup','Book Club','Couples Night Out','Directory','Girls Night Out','Helping Hands','Membership','Newsletter','Serving Sewickley','Treasurer']; 
var GROUPS_COL = 5; //This is column 5 
var COLG = 6; //Column G 
var EMAIL_COL = 23; //Column X 
var emailList = ['', '', '', '', '', '', '', '', '', '', '', ''] //12 blanks 

    var data = SpreadsheetApp.openById('___').getSheetByName('Master').getDataRange().getValues(); 
    for (var i = 1; i < data.length ; i++){ 
    for(var j = 0 ; j < options.length ; j++){ 
     if (data[i][GROUPS_COL].indexOf(options[j]) != -1 && 
     data[i][COLG] != 'Yes') { 
     if (emailList[j] != ''){ 
      emailList[j] += ', ' ; 
     } 
     emailList[j] += data[i][EMAIL_COL]; 
     } 
    } 
    } 
    for (var i = 0 ; i < 12; i ++){ 
    Logger.log(options[i] + ': ' + emailList[i]) 
    } 
    MailApp.sendEmail("[email protected]", "Groups Export", Logger.getLog() + " \n\n" + 
        "At your request, you've been added to this Sewickley Newcomers & Neighbors Google Group." + "\n\n" + 
        "Using Google Groups allows us to always have up to date e-mail lists, make sure that people don't get bombarded with messages they don't want, and facilitate smooth communication between our members. If you have any questions about how to use the Google Groups service with your Newcomers & Neighbors membership, please send an e-mail to [email protected]" + "\n\n" + 
        "Thank you and thanks for your participation!") ; 

    Browser.msgBox("OK. Check your e-mail for the export list. doebtown rocks the house!") 
}