2013-07-24 2 views
0

"승인"또는 "거부"가 포함 된 이메일을 제출하기 위해 Google 양식을 설정했습니다. 이메일에서 버튼을 클릭하면 스프레드 시트의 입력란에 입력해야합니다. 대신에 나는 다음과 같은 오류가 나타날 수 메소드 (클래스) (클래스) getRange ((클래스), 수)메소드 (클래스) (클래스)를 찾을 수 없습니다. getRange ((class), number) Google 양식의 오류

var ss = SpreadsheetApp.openById('0AgiQ-iVBgD0HdDd3Xzh2aXJVRmRjQkI5dmhkd0pSMnc'); 
var sheet = ss.getSheets()[0]; 
var lastRowNum = sheet.getLastRow(); 
var range = "A1:A"+lastRowNum; 
var allResponseIDs = sheet.getRange(1, 1, lastRowNum, 1); 
var cellValues = allResponseIDs.getValues(); 
var year = e.year; 
var month = e.month; 
var day = e["day-of-month"]; 
var today = month+'/'+day+'/'+year; 

for(var i = 1; i <= lastRowNum; i++) { 
if(cellValues[i] === responseID) { 
    var rowNumber = i; 
} 
} 

var preApproved = sheet.getRange(rowNumber, 14, 1, 1); 

if (!preApproved) { 
    // Set the 1st level approval 
    if (approvalOne === 'true') { 
    sheet.getRange(rowNumber, 14, 1, 1).setValue(true); 
    } else { 
    sheet.getRange(rowNumber, 14, 1, 1).setValue(false); 
    } 
    sheet.getRange(rowNumber, 15, 1, 1).setValue(today); 

어떤 제안을 찾을 수 없습니까?

+0

코드에는 많은'getRange()'호출이 있습니다. 문제의 원인을 찾아 낼 수 있습니까? 디버그 모드를 사용하거나 트리거 내에서 코드가 실행되는 경우 로거 기능을 사용하여 이러한 호출 중 어떤 것이 불만인지 알 수 있습니다 – Srik

답변

0

rowNumber이 정의되지 않을 때 getRange(rowNumber...을 호출하는 것이 문제입니다. Srik이 제안하고, 디버거에서이 실행으로 당신이 한 경우

, 당신은 아마도에서 중지 실행을 찾을 것 :

var preApproved = sheet.getRange(rowNumber, 14, 1, 1); 

... 당신은 어떤 일치하기 때문에, rowNumber가 정의되지 않은 것을 볼 것 responseID에 대한 검색 결과입니다.

두 줄 후에, preApproved이 "true ish"인지 확인하고 있습니다. 나는 왜 당신이 그것을하고 있는지 모른다. 어쩌면 이것은 responseID을 찾을 수 없을 것이라는 인식이고 결과는 getRange() 호출에 대한 널 범위가 될 것이라는 예상이다. 아니면 그 세포에서 가치를 얻으려고 한거야? 이 경우 가정 해 보겠습니다. Range.getValue()을 사용해야합니다.

검색 결과의 유효성을 검사하는 것이 더 나을 것입니다. 이를 수행하는 동안 행 인덱스/열 번호 (1에서 시작)와 배열 인덱스 (0에서 시작)를 혼합하는 것에주의해야합니다. cellValuesRange.getValues()으로 채워진 2 차원 배열입니다.

var found = false; 
var rowNumber = -1; // Would still throw an exception if used in getRange, 
        // but type is known, so better error message 
for(var i = 0; i < lastRowNum; i++) { 
    if(cellValues[i][0] === responseID) { 
    found = true; 
    var rowNumber = i+1; // Adjust to 1-based indexing 
    break;    // Done searching 
    } 
} 

if (found) { 

    var preApproved = sheet.getRange(rowNumber, 14, 1, 1).getValue(); 

    if (!preApproved) { 
    // Set the 1st level approval 
    if (approvalOne === 'true') { 
     sheet.getRange(rowNumber, 14, 1, 1).setValue(true); 
    } else { 
     sheet.getRange(rowNumber, 14, 1, 1).setValue(false); 
    } 
    sheet.getRange(rowNumber, 15, 1, 1).setValue(today); 
    ... 
    } 
} 
관련 문제