아래 함수는 두 번째 및 세 번째 'for 루프'를 통과 할 때 null 값을 반환하며 이유를 알 수 없습니다. 'i = start'를 포함하는 for 루프는 'decisionPoints'변수를 반복하고 첫 번째 열의 값을 기반으로 데이터를 반환합니다. 'decisionPoints'의 처음 몇 행은 첫 번째 열에 '1'이 있습니다. 다음 몇 행에는 첫 번째 열에 '2'가 있고 다음 몇 행에는 '3'이 있습니다. 루프가 '2'와 '3'을 검색 할 때 찾고있는 첫 번째 값을 포함하는 행 앞의 각 행에 대해 null 값을 반환합니다. 따라서 '2'를 검색하면 '1'을 포함하는 이전 행에 대해 세 개의 null 값이 표시됩니다. '3'을 검색하면 '1'또는 '2'를 포함하는 이전 행에 대해 6 개의 null 값이 표시됩니다.
누구든지 이유를 설명 할 수 있습니까?
var loBuild = function(loNumber,category){
var lo = [],
spreadsheet = SpreadsheetApp.getActiveSpreadsheet(),
decisionPointsSheet = spreadsheet.getSheetByName("Decision Points"),
lastColumn = decisionPointsSheet.getLastColumn(),
lastDecisionPoint = decisionPointsSheet.getLastRow(),
decisionPoints = decisionPointsSheet.getRange(1,1,lastDecisionPoint,lastColumn).getValues(),
count = 0,
loColumn = [];
decisionPoints.shift();
for(i in decisionPoints){
loColumn.push(decisionPoints[i][0]);
if(decisionPoints[i][0] === loNumber){
count++;
}
}
var start = loColumn.indexOf(loNumber);
for(i = start; i < count+start; i++){
lo[i] = [];
var dp = decisionPoints[i][1];
var dpLabel = decisionPoints[i][3];
for(j = 0; j < lastColumn; j++){
switch(j){
case 0:
lo[i][j] = dp;
break;
case 1:
lo[i][j] = "=countifs('" + dpLabel + "'!F:F,\"" + category + "\")"
break;
case 2:
lo[i][j] = "=countifs('" + dpLabel + "'!F:F,\"FCC\")"
break;
}
}
}
return(lo);
}
for(i = start; i < count+start; i++){
lo[i] = [];
경우 start=3
, 당신은 당신의 채우기 시작하기 lo
(LO [3]) 4 요소에서 배열을 - 따라서 LO [0] 보라 [1] 보라 [2]가 자동으로 널 (null) 값을 사용하여 배열에 붙을 배열은 0을 기반으로하기 때문에 .
기존 시트 행을 대체 / 업데이트하기 위해 시트 행 값 배열을 만들려고하는 것 같습니다. 이 경우 lo
행 인덱스 참조와 새 값 배열을 포함하는 객체 배열 을 만드는 것이 좋습니다 .
중요 참고 : 아래 코드는 시트의 데이터가 첫 번째 열 (loNumber 값)을 기준으로 정렬되었다고 가정합니다. 이 가정은 게시 된 코드 샘플, 특히 count
변수 설정 방법을 기반으로합니다 (시트가 loNumber 열로 정렬되지 않은 경우 코드가 잘못된 행을 반복 함).
lo = [];
...
var start = loColumn.indexOf(loNumber);
for(i = start; i < count+start; i++){
var objRow = {rowIndex: i, rowValues: []}; // row object
var dp = decisionPoints[i][1];
var dpLabel = decisionPoints[i][3];
for(j = 0; j < lastColumn; j++){
switch(j){
case 0:
objRow.rowValues[j] = dp;
break;
case 1:
objRow.rowValues[j] = "=countifs('" + dpLabel + "'!F:F,\"" + category + "\")"
break;
case 2:
objRow.rowValues[j] = "=countifs('" + dpLabel + "'!F:F,\"FCC\")"
break;
default:
objRow.rowValues[j] = ""; // if j is > 2
}
}
lo.push(objRow); // push row object into lo array
}
return(lo);
예를 들어 start=3
및 가정 count=2
하면 다음 lo
배열 을 얻을 수 있습니다 .
[
{rowIndex:3, rowValues:[row3_col0_value, row3_col1_formula, row3_col2_formula]},
{rowIndex:4, rowValues:[row4_col0_value, row4_col1_formula, row4_col2_formula]}
]
그런 다음 lo
해당 시트 행에서 array 및 setValues () 를 반복 할 수 있습니다 .
for ( var i=0; i<lo.length; i++ ) {
var rowData = lo[i];
sheet
.getRange( rowData.rowIndex-1, 1, 1, rowData.rowValues.length )
.setValues( [rowData.rowValues] );
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다