2013-07-29 45 views
0

我正在用Google表单收集数据,并将其存储在电子表格中。在Google电子表格中对数据进行排序

我想写一个脚本来创建单独的电子表格,按名称排序。

E.g.

我有三个用户:Daniel,GillesJean Pierre

我想从主窗口创建一个单独的表格,仅列出提交的数据。

所以,如果名称是在第2行Daniel,我想该行中的所有数据复制到第二片

到目前为止:

function tri() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var data = ss.getDataRange().getValues(); 
    var sheet2 = ss.getSheets()[1]; 

    for (var t=1; t<data.length; t++) 
    { 
     if (data ='Daniel') 
     { 
      sheet2.appendRow([data]);  
     } 
    } 
} 

回答

0

无需代码,就可以在电子表格中执行此操作。我更喜欢的解决方案是为每个用户创建命名选项卡,将他们的名字放在表格的单元格A1中,然后使用电子表格QUERY函数填充其表单。像这样的事情在小区A3,说:

=query('Form Responses'!A1:Z,"select * where B = '" &A1 & "'") 

调整源以匹配你的现实('Form Responses'!A1:Z)。


但是如果你必须使用脚本,试试这个:

function tri() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Form Responses"); 
    var data = sheet.getDataRange().getValues(); 
    var users = ['Daniel', 'Gilles', 'Jean Pierre']; 

    for (var user=0; user<users.length; user++) { 
    // Open sheet with user's name; create if needed 
    var dest = ss.getSheetByName(users[user]); 
    if (!dest) dest = ss.insertSheet(users[user], user+1); 

    var newData = []; 
    newData.push(data[0]); // copy headers 
    for (var row=1; row < data.length; row++) { 
     // If row is for this user, copy it 
     if (data[row][1] === users[user]) newData.push(data[row]); 
    } 
    // Clear user's sheet, then save collected data 
    dest.clearContents(); 
    dest.getRange(1, 1, newData.length, newData[0].length).setValues(newData); 
    } 
} 
0

为补充Mogsdad(优秀)答案我想补充一点,可能是重要的一个细节。

因为你的用户填写表格,你也不能肯定他们将进入他们的名字的方式,将丹尼尔写“丹尼尔”或“DANIEL”,甚至“丹尼尔”如果他匆忙?和“让皮埃尔”它甚至可能会更糟,因为通常应该有一个连字符皮埃尔 !!!

所以我建议围绕名称检测或其他可能的解决方案添加一些逻辑,如果您确切知道谁将填写此表单,请使用表单中的列表选择来选择名称。 这个最新的解决办法是,当然最简单的一个...

否则,你可以简单地使用:

...data[row][1].toUpperCase().replace(/ /g,'') == users[user];// users should then be defined in UPPERCASE 

例如,以避免任何大/小写错误和多余的空格...

+0

当然......你可以在选项列表中找到用户名。 – Mogsdad

相关问题