在Google电子表格中对数据进行排序

时间:2013-07-29 21:38:46

标签: google-apps-script google-sheets

我正在使用Google表单收集数据,并将其存储在电子表格中。

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

E.g。

我有三个用户:DanielGillesJean 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]);    
         }
     }  
}

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分:0)

作为Mogsdad(优秀)答案的补充,我想添加一个可能很重要的细节。

由于您的用户填写的表单无法确定他们输入姓名的方式,Daniel会写“ Daniel ”或“ DANIEL ”如果他赶时间,甚至是“ daniel ”?对于“ Jean Pierre ”,它甚至可能更糟,因为通常在 Jean Pierre 之间应该有一个连字符!!!

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

否则您只需使用:

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

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