2013-07-29 47 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

相關問題