2017-12-31 209 views
0

시도해보십시오. 시트에 새 행을 쓰고있는 문제를 해독하지 못할 수도 있습니다. 이 작업을 여러 번 해본 결과 Logger.log를 사용하여이 디버깅을 철저히 해봤지만 해결할 수 없습니다. 여기에 내가 뭘하는지 요약하는 코드 및 로그는 다음과 같습니다Google Script Errror : setValues를 사용할 때 '잘못된 범위 너비'가 표시됩니다.

내가하고 있어요 :

  • (기존 행 아래) 시트에
  • 73 새 행을 행을 추가 시트에 새 행을 작성하는 시도가이 오류 얻을 때 학년 행
  • : 배열에 저장되어 저장된다 범위 너비가 잘못되었습니다 1이되어야한다 (26)

는 여기에 몇 가지 소호를 포함한 코드입니다 gger.logs는 :


var BeginningRow = LastSGRowSheet + 1; 

var EndingRow = BeginningRow + SGPushKtr -1; 

Logger.log("BeginningRow =>" + BeginningRow + "<=, SGPushKtr =>" + SGPushKtr + "<=, Ending Row =>" + EndingRow + "<="); 

var GradesRangeString = 'A' + BeginningRow + ':' + LastStudentGradesColumnLetter + EndingRow; 

Logger.log("GradesRangeString =>" + GradesRangeString + "<="); 

StudentGradeSheet.getRange(GradesRangeString).setValues(GradeRows); 

오류 코드의 마지막 줄에서 발생합니다.

17-12-31 11:51:15:763 EST] BeginningRow =>364<=, SGPushKtr =>73<=, Ending Row =>436<= [17-12-31 11:51:15:764 EST] GradesRangeString =>A364:Z436<=

+0

조금 더 많은 정보 : 내가 쓰고있는 시트에는 26 열이 있습니다. 그것은 "26"이 오류에서 비롯된 것입니다. –

+0

'GradeRows'는 어떻게 정의되어 있습니까? 코드 위의 텍스트에서 언급했음을 알고 있지만 질문을 편집하여 코드를 작성하십시오. –

답변

1

의 사용자 데이터 배열 dA.length dA를 그 배열의 행의 수이다라고하자 그에게 직사각형 어레이 다음 열의 수 [0 실행 vA가 가정 : 여기

로그의 ].길이. 따라서 출력 명령은 이와 같은 것이되어야합니다.

sheet.getRange(firstRow,firstColumn,dA.length,dA[0].length).setValues(dA); 

If you'd like to learn a little more about this problem check this out.

또한 루프에서 한 번에 현재 시트 한 행에 각 행을 추가 할 수 있습니다.

+0

입력 쿠퍼를 주셔서 감사합니다. 나는 특정 여름 학기 응용 프로그램을 개발하기 위해 지난 여름 Google Script에서 프로그래밍을 시작했습니다 (저는 교사입니다). 나는 Google Scripts의 5 분 제한 시간을 지키기 위해 배열을 사용하여 시트에 읽고 쓰는 것이 필요했습니다. 나는 프로젝트에서 배열을 5 ~ 6 회 사용하여 시트에 데이터를 작성했다.필자는 항상 "to :"범위를 설명하기 위해 "A4 : Z100"과 같은 값을 포함하는 문자열을 사용했습니다. 반대로, 즉, 범위를 설명하기 위해 4 개의 매개 변수를 전송하는 방법입니다. 그리고 그것은 항상 나를 위해 일했습니다. 그러나 당신의 방법을 시도하는 것은 상처가 될 수 없습니다. 그럴거야 –

+0

애플 리케이션 스크립트 실행 제한을 해결하는 방법은 HTML 대화 상자에서 자바 스크립트 타임 아웃 기능에서 외부 트리거를 사용하는 것입니다. – Cooper

0

GradeRows가 귀하의 모든 코드를 보지 않고 왜 귀하의 범위와 일치하지 않는지 알기 어렵습니다. Cooper의 getRange 인수를 사용하면 문제가 드러날 수 있으며 코드를 변경할 때 행 및 열 변수를 업데이트하지 않아도됩니다. 나를 때로는 가져 오는 또 다른 문제는 setValues ​​배열이 정확히 범위와 동일한 차원 일 필요가 있다는 사실입니다. 한 행의 길이가 다르면 오류가 발생합니다. 행 배열을 만드는 데 사용하는 논리가 다른 길이가 될 수 있다면 아래 함수를 사용하여 배열을 시트에 쓰기 전에 대칭 배열인지 확인합니다. 또한 디버깅에 유용합니다. appendRow 사용에 대한

/** 
 
* Takes a 2D array with element arrays with differing lengths 
 
* and adds empty string elements as necessary to return 
 
* a 2D array with all element arrays of equal length. 
 
* @param {array} ar 
 
* @return {array} 
 
*/ 
 
function symmetric2DArray(ar){ 
 
    var maxLength; 
 
    var symetric = true; 
 
    if (!Array.isArray(ar)) return [['not an array']]; 
 
    ar.forEach(function(row){ 
 
    if (!Array.isArray(row)) return [['not a 2D array']]; 
 
    if (maxLength && maxLength !== row.length) { 
 
     symetric = false; 
 
     maxLength = (maxLength > row.length) ? maxLength : row.length; 
 
    } else { maxLength = row.length } 
 
    }); 
 
    if (!symetric) { 
 
    ar.map(function(row){ 
 
     while (row.length < maxLength){ 
 
     row.push(''); 
 
     } 
 
     return row; 
 
    }); 
 
    } 
 
    return ar 
 
}

0

어떻게 ()? 그렇게하면 범위에 대한 계산을 많이 할 필요가 없습니다. 데이터를 순환하여 행 단위로 추가 할 수 있습니다. 다음과 같은 것 :

myDataArr = [[1,2],[3,4],[5,6]] 
myDataArr.forEach(function(arrayItem){ 
    sheet.appendRow([arrayItem[0],arrayItem[1]]) 
}) 
// This will output to the sheet in three rows. 
// [1][2] 
// [3][4] 
// [5][6]