2017-12-16 5 views
0

여러 셀에 값을 설정하는 코드로 개선하는 것이 가능합니까?여러 개의 .getRange()에 대한 Google Sheet 용 Apps 스크립트 코드 간소화 setValue()

var depart = ligne.filter(String).length; 
    if (depart < 27) { 
     var partence = depart + 2 
    } else { 
     var partence = depart + 13 
    } 

    commande.getRange(partence, 2).setValue(designation); 
    commande.getRange(partence, 15).setValue(designation); 
    commande.getRange(partence, 26).setValue(designation); 
    commande.getRange(partence, 37).setValue(designation); 
    commande.getRange(partence, 49).setValue(designation); 
    commande.getRange(partence, 61).setValue(designation); 
    commande.getRange(partence, 73).setValue(designation); 
    commande.getRange(partence, 85).setValue(designation); 
    commande.getRange(partence, 97).setValue(designation); 
    commande.getRange(partence, 109).setValue(designation); 

이렇게 할 수 있습니까? : 애플리케이션 스크립트에서

commande.getRange(partence, 2 And 15 And 26 And 37 And 49 And 61 And 73 And 85 And 97 And 109).setValue(designation);

+0

변수 이름을 지정할 때 다른 사람들이 코드를 이해할 수 있도록 영어로 의미가있는 이름을 선택하는 것이 좋습니다. 게다가, 'partence'는 어떤 언어로 된 단어가 아니며, 심지어 프랑스어입니다. 부조화가 당신이 의미 한 것일까요? 어떤 경우 든 코드에서 언어를 결합하면 읽기가 더 어려워 질 수 있습니다. –

+0

네, 고마워요. 다음에주의 할게. – Arnaud

답변

1

범위는 항상 시트의 사각형 부분입니다. 서로 인접하지 않은 여러 셀의 값을 수정해야하는 경우 셀 범위가 개별 범위이므로 사용자가 수행 한 것처럼 getRange setValue 호출을 많이해야합니다. getRange(partence, 2 And 15)과 같은 것은 없습니다.

행 "partence"에 수식이 포함되어 있지 않으면 설정할 필요가있는 모든 셀을 포함하는 단일 범위로 작업 할 수 있습니다. 먼저 당신이 원하는 값의 배열을 만들 : 당신은 이런 식으로 뭔가를 시도 할 수 있습니다

var ix = [2, 15, 26, 37, 49, 61, 73, 85, 97, 109]; 
var range = commande.getRange(partence, ix[0], 1, ix[ix.length-1] - ix[0] + 1); 
var values = range.getValues(); 
for (i in ix) { 
    values[0][ix[i] - ix[0]] = designation; 
} 
range.setValues(values); 
+0

대단히 감사합니다! 완벽하게 작동합니다. 나는 또한 귀하의 제안 (더 짧음)으로 코드가 더 빨리 실행될 것이라고 생각했지만, 이상하게도 그렇지 않습니다. 어쨌든, 고맙습니다. – Arnaud

0

: 해당 범위의 다른 값 (이 그러나 그 세포에있는 공식을 제거하는 것) 읽은 후 변경 다시 설정됩니다 시트에 삽입/설정 한 다음 해당 배열을 단일 샷으로 삽입합니다.

var depart = ligne.filter(String).length; 
    if (depart < 27) { 
     var partence = depart + 2 
    } else { 
     var partence = depart + 13 
    } 
var values = []; 
var values = commande.getRange(partence, 1, 110, 1).getValues(); 
var i; 
for (i = 1; i <= values.length; i++) { 
    if(i == 2 || i == 15 || i == 26 || i == 37 || i == 49 || i == 61 || i == 73 || i == 85 || i == 97 || i == 109) { 
    values[i-1][0] = designation; 
} 
} 

commande.getRange(partence, 1, 110, 1).setValues(values); 

테스트되지 않은 코드입니다. 버그가있는 경우 알려 주시면 기꺼이 도와 드리겠습니다.

감사합니다.

+0

고맙습니다. 기능 코드 부분. 실제로 데이터는 행에는 전송되지만 열에는 전송되지 않습니다. 나는 왜 그런지 이해하지 못합니다 ... – Arnaud

+0

귀하의 질문에 어떤 정보가 있었는지에 근거하여 대답하려고 노력했습니다. 정확히 무엇을 원하는지 정확히 말하면 더 많은 것을 도울 수 있습니다. – Umair