我正在使用Google表单收集数据,并将其存储在电子表格中。
我想编写一个脚本来创建单独的电子表格,按名称排序。
E.g。
我有三个用户:Daniel
,Gilles
和Jean 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 :(得分: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
例如,以避免任何大写/小写错误和额外的空格...