2014-10-23 3 views
0

В редакторе сценариев формы Google я использую ниже код для вставки ссылки Изменить ответ в электронной таблице с данными формы.TypeError в скрипте Google Form

function assignEditUrls() { 
    var form = FormApp.openById('1bAXKuBKQny9CLU3WOK4xxxxxxxxxxxxxxxxxxxxxxxxxxxx'); 
    //enter form ID here 

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses'); 

    //Change the sheet name as appropriate 
    var data = sheet.getDataRange().getValues(); 
    var urlCol = 7; // column number where URL's should be populated; A = 1, B = 2 etc 
    var responses = form.getResponses(); 
    var timestamps = [], urls = [], resultUrls = []; 

    for (var i = 0; i < responses.length; i++) { 
    timestamps.push(responses[i].getTimestamp().setMilliseconds(0)); 
    urls.push(responses[i].getEditResponseUrl()); 
    } 
    for (var j = 1; j < data.length; j++) { 

    resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']); 
    } 
    sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls); 
} 

Но когда я запустить этот сценарий, он показывает ошибку, как этот

TypeError: Cannot call method "getSheetByName" of null. (line 5, file "Code")Dismiss 

Как можно решить эту проблему?

+0

Возможно, это не тот ответ, который вы ищете, но посмотрите на это: http://stackoverflow.com/questions/21434582/google-script-on-a-spreadsheet-create-a-link-to-modify -ответ-через-форму/21452198 # 21452198 – Harold

ответ

1

Этот скрипт открывает форму по идентификатору, и ожидает, что лист ответа быть в таблице сценарий содержится в Так у вас есть два варианта:.

  • Добавьте код в редакторе сценариев из Таблицу Google, которая собирает ответы, а не внутри редактора формы.

  • В качестве альтернативы, open the Spreadsheet by ID.

    var sheet = SpreadsheetApp.openByID(###SHEET-ID###) 
              .getSheetByName('Form Responses'); 
    

    или еще лучше, как говорит Серж:

    var sheet = SpreadsheetApp.openByID(form.getDestinationId()) 
              .getSheetByName('Form Responses'); 
    

Объяснение: Это сообщение об ошибке указывает на то, что объект, который вы пытались метод getSheetByName() был на null объект. Этот объект был получен от SpreadsheetApp.getActiveSpreadsheet(). Этот метод применим только в сценариях, связанных с электронными таблицами.

+1

В качестве дополнения к этому (хорошему) ответу вы можете получить идентификатор таблицы назначения с помощью метода Form.getDestinationId, см. doc здесь: https://developers.google .com/apps-script/reference/forms/form –

+1

@Sergeinsas, oooh, nice! Обновлено. – Mogsdad

Смежные вопросы