0

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

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

例如

我有三个用户DanielGillesJean Pierre

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

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

至今:

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]);    
         }
     }  
}
4

2 回答 2

1

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

由于您的用户正在填写表格,您无法确定他们输入姓名的方式,如果 Daniel赶时间,他会写“ Daniel ”或“ DANIEL ”甚至“ daniel ”吗?而对于“让·皮埃尔”来说,情况可能更糟,因为通常皮埃尔之间应该有一个连字符!

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

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

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

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

于 2013-07-30T19:11:19.617 回答
1

无需代码,您可以在电子表格中执行此操作。我更喜欢的解决方案是为每个用户创建命名选项卡,将他们的名字放在工作表的单元格 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);
  }
}
于 2013-07-30T18:00:33.043 回答