2012-07-09 49 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!") 
}