2017-01-16 87 views
0

我已經設置了一個腳本,可以將現有答案從Google表格插入到Google表單中(通過修改this answer中的代碼)。我將它插入到表單腳本中,並且它在表單中的所有字段都被填充時起作用。然而,表格調查問卷的性質是這樣的,某些章節可能會被跳過,因此表格中的一些字段爲空。我想插入這樣的表格,其中一些答案字段留空。如何在將Google表格的答案插入到Google表格中時插入空白字段

當工作表中的所有字段都已填充時,該腳本將工作,但在遇到空白字段時不起作用(這意味着第一行包含任何空白字段的答案會停止腳本的執行)。

我想知道的是如何解釋我的腳本,它應該只接受空白答案並插入它們?

這裏是腳本:

function ApendResponses() { 
    var form = FormApp.openById("1M-mTBlZPRj44jXs_YHj-cNa9yHjU25ItEWBuKtUvKZo"); 
    var sheet = SpreadsheetApp.openByUrl("https://ocs.google.com/spreadsheets/d/1Jc9NVlN-Wcmd87E-FnyocHgl5Vx2WXqOGPTkhvXjCFU/"); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    for (var x = 0; x < values.length; x++) { 

    var formResponse = form.createResponse(); 
    var items = form.getItems(); 

    var row = values[x]; 

    var formItem = items[0.0].asTextItem(); 
    var response = formItem.createResponse(row[1]);  
    formResponse.withItemResponse(response); 

    var formItem = items[1.0].asTextItem(); 
    var response = formItem.createResponse(row[2]);  
    formResponse.withItemResponse(response); 

    var formItem = items[2.0].asListItem(); 
    var response = formItem.createResponse(row[3]);  
    formResponse.withItemResponse(response); 

    var formItem = items[3.0].asPageBreakItem();  
    formResponse.withItemResponse(response); 

    var formItem = items[4.0].asListItem(); 
    var response = formItem.createResponse(row[4]);  
    formResponse.withItemResponse(response); 

    var formItem = items[5.0].asPageBreakItem();  
    formResponse.withItemResponse(response); 

    var formItem = items[6.0].asListItem(); 
    var response = formItem.createResponse(row[5]);  
    formResponse.withItemResponse(response); 

    var formItem = items[7.0].asPageBreakItem();  
    formResponse.withItemResponse(response); 

    var formItem = items[8.0].asTextItem(); 
    var response = formItem.createResponse(row[6]);  
    formResponse.withItemResponse(response); 

    formResponse.submit(); 
    Utilities.sleep(500); 

    } 

}; 

Form is here,以其accompanying Sheet here(I第三行用於測試目的在左空白字段)。

回答

0

這裏是一個有效的解決方案:

function ApendResponses() { 
    var form = FormApp.openById("1M-mTBlZPRj44jXs_YHj-cNa9yHjU25ItEWBuKtUvKZo"); 
    var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Jc9NVlN-Wcmd87E-FnyocHgl5Vx2WXqOGPTkhvXjCFU/"); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    for (var x = 0; x < values.length; x++) { 

    var formResponse = form.createResponse(); 
    var items = form.getItems(); 

    var row = values[x]; 

    var formItem = items[0.0].asTextItem(); 
    if (!isempty(row[1])){ 
    var response = formItem.createResponse(row[1]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[1.0].asTextItem(); 
    if (!isempty(row[2])){ 
    var response = formItem.createResponse(row[2]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[2.0].asListItem(); 
    if (!isempty(row[3])){ 
    var response = formItem.createResponse(row[3]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[3.0].asPageBreakItem();      
    formResponse.withItemResponse(response); 

    var formItem = items[4.0].asListItem(); 
    if (!isempty(row[4])){ 
    var response = formItem.createResponse(row[4]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[5.0].asPageBreakItem(); 
    formResponse.withItemResponse(response); 

    var formItem = items[6.0].asListItem(); 
    if (!isempty(row[5])){ 
    var response = formItem.createResponse(row[5]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[7.0].asPageBreakItem(); 
    formResponse.withItemResponse(response); 

    var formItem = items[8.0].asTextItem(); 
    if (!isempty(row[6])){ 
    var response = formItem.createResponse(row[6]); 
    formResponse.withItemResponse(response);} 

    formResponse.submit(); 
    Utilities.sleep(0.01); 

    } 

} 

function isempty(entry) { 
    if (entry == undefined) 
    { 
    return true; 
    } 

    if (entry == null){ 
    return true; 
    } 
    var tempstr = entry.toString(); 

    tempstr = tempstr.replace(/[\r\n\t\s]+$/,""); 
    tempstr = tempstr.replace(/^[\r\n\t\s]+/,""); 
    if (tempstr.length == 0){ 

    return true; 
    } else { 

    return false; 
    } 

} 

該解決方案有兩個問題:

  1. 它不會停止,即腳本處理的最後一行之後,它不斷增加空行。這很容易處理:在正確數量的答案被注入後腳本需要被停止,並且可以從表單的「響應」選項卡中單獨刪除任何剩餘答案。

  2. 運行腳本有6分鐘的時間限制。因此這個腳本不能處理很多答案(絕對不會超過500個)。解決方法可以通過更好的腳本編寫(停止,記錄處理的答案,然後再次運行,直到完成工作),或者將答案分成幾張並逐一運行。

Source.