2009-06-05 14 views
36

Google 스프레드 시트의 행에있는 최소 셀의 색상을 자동으로 변경하는 방법을 찾고 있습니다.Google 스프레드 시트 자동 색상 지정

그래서,

1 | 2 | 3 
4 | 2 | 1 
2 | 1 | 6 

같은 테이블 것이 그들 '1'로 모든 셀 색상 것입니다. 드롭 다운 메뉴에서

+0

관련 프로그래밍이 필요하지 않을 수도 있습니다. – JasonV

+2

조건부 포맷팅은 사용자 인터페이스를 통해 이루어 지더라도 프로그래밍을 사용하여 문제를 분석해야하므로 컴퓨터에서 수행 할 수있는 규칙 집합을 정의해야합니다 태스크. 이것을 고려해 볼 때이 질문은 다시 열어야한다고 생각합니다. –

+0

모든 셀을 선택하고 다음과 같은 사용자 지정 수식을 적용하십시오.'= and (notblock (A1)), A1 = min (1 : 1))' – pnuts

답변

57

, 서식 ˁ> 조건부 서식 ...

는 그런 다음 규칙과 색상을 설정합니다. 여러 셀을 선택하여이 작업을 수행 할 수도 있습니다.

편집 :

당신이 색상으로 할 수있는 일의 범위이다

. 복잡한 수식을 사용하여 셀의 최소값을 찾은 다음 셀에있는 값과 일치하는 경우 색상을 지정하지만이 값이 중요한 경우 Google 문서 대신 Excel을 사용할 수도 있습니다.

+1

언제든지 사용할 수있는 조건부 서식을 사용하여 원하는 것을 달성 할 수없는 경우 onEdit 이벤트를 수정하여 셀을 확인하고 상상할 수있는 조건에 따라 채색을 변경하는 스크립트 편집기. Excel을 사용할 필요가 없습니다. –

+0

이것은 2015 년 이후로 변경되었지만 필요한 부분을 얻었습니다! 이제'Format' ->'Conditional formatting ...'->'Color Scale'을 클릭 할 수 있습니다. – PubNub

+0

@Kekoa 쿨, 업데이트 주셔서 감사합니다. –

26

트릭은은 onEdit 이벤트 트리거를 활용 내가 조건부 서식이 작동 것이지만, 최소한 당 행이 표준 조건부 서식에 대한 너무 복잡 생각 언뜻보기에 몇 가지 정보

을 추가하는 것입니다 . 알아내는 것은 약간 까다 롭지 만 할 수 있습니다.

여기에 전체 스크립트 (테스트 작업은)입니다 :

function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var r = s.getActiveRange(); 
    var row = r.getRow(); 
    var cols = s.getDataRange().getNumColumns(); 

    // crate a range for the row using getRange(row, column, numRows, numColumns) 
    var rowRange = s.getRange(row, 1, 1, cols); 
    var rowValues = rowRange.getValues(); 

    // check all the values in the row 
    var val = 999; 
    for(var i = 0; i < cols; i++) { 
    if(val > rowValues[0][i] && rowValues[0][i] !== "") { 
     val = rowValues[0][i]; 
    } 
    } 
    for(var j = 0; j < cols; j++) { 
    if(rowValues[0][j] === val) { 
     s.getRange(row,(j + 1)).setFontColor("blue"); 
    } else { 
     s.getRange(row,(j + 1)).setFontColor("black"); 
    } 
    } 
} 

먼저 당신은 스프레드 시트 변경과 함께 스크립트를 트리거은 onEdit 이벤트 핸들러로 누릅니다.

function onEdit() 

onEdit의 함수 이름을 지정하면 onEdit 동작을 재정의하려는 것으로 자동 인식됩니다.

참고 : 문서 도구의 이벤트 처리기는 다소 까다 롭습니다. 문서는 여러 사용자가 동시에 여러 번 편집 할 수 있으므로 이벤트 처리기는 서버 측에서 처리됩니다. 이 구조의 주요 문제점은 이벤트 트리거 스크립트가 실패 할 경우 서버에서 실패한다는 것입니다. 디버그 정보를보고 싶다면 이벤트가 실패했을 때 디버그 정보를 이메일로 보내는 트리거 메뉴 아래에 명시적인 트리거를 설정해야합니다. 그렇지 않으면 자동으로 실패합니다.

는 행 번호를 가져 오기 :

var r = s.getActiveRange(); 
    var row = r.getRow(); 

예쁜 자기는 여기에 설명적인. 활성 범위는 편집중인 셀입니다.

잡아 열 수 :

var cols = s.getDataRange().getNumColumns(); 

당신은이에 대한 전체 스프레드 시트의 데이터 범위를 확인해야합니다.

var rowRange = s.getRange(row, 1, 1, cols); 

이 값이되어야 하는지를 확인하기 위해 코드의 주석을 읽어

다음 당신은 문제가되는 행에 대한 데이터를 포함하는 데이터 범위를 구성해야합니다.

그런 다음 우리는 값의 테스트 결과 캐시 :

var rowRange = s.getRange(row, 1, 1, cols); 

인해 Google 문서 도구 스크립트 이벤트 콜백의 특성을 남용을 방지하기 위해, 그래서 서버 측을 실행 구글은 스크립트 실행에 시간 제한을 둔다. 값을 캐싱하면 서버가 불필요한 왕복을 많이하여 스프레드 시트에서 값을 가져 오는 것을 막을 수 있습니다.

다음 두 부분은 모든 마술이 일어나는 곳입니다.

먼저, 행의 모든 ​​셀을 통과시켜 최소값을 찾습니다.

var val = 999; 
    for(var i = 0; i < cols; i++) { 
    if(val > rowValues[0][i] && rowValues[0][i] !== "") { 
     val = rowValues[0][i]; 
    } 
    } 

간단히하기 위해 기본 천장을 999로 설정했습니다. This could be change to a more appropriate value. 트릭은 값을 현재 로우보다 낮은지 테스트하는 것입니다. 그것이 더 낮 으면, 새로운 낮은 값을 표시하십시오.

가장 낮은 값으로 셀 번호를 표시하고 명시 적으로 설정하면 쉽게 벗어날 수 있지만 여러 셀의 값이 가장 낮은 경우를 다루고 싶습니다. 행의 모든 ​​셀을 통해

for(var j = 0; j < cols; j++) { 
    if(rowValues[0][j] === val) { 
    s.getRange(row,(j + 1)).setFontColor("blue"); 
    } else { 
    s.getRange(row,(j + 1)).setFontColor("black"); 
    } 
} 

루프 동일하다 : 최소를 포함한 복수의 셀이 운반

번째 패스를 필요로한다. 이번에는 셀 값이 선택한 최소 값과 일치하는지 여부 만 확인합니다. 일치하면 글꼴 색상이 파란색으로 바뀝니다. 그렇지 않으면 글꼴 색상이 검은 색으로 변경됩니다.


대략 요약하면 다음과 같습니다. Google Apps Scripting이 스프레드 시트 및 데이터 셀을 참조하는 방식에 익숙해지기는 다소 까다 롭지 만 문서 도구로는 할 수있는 일이별로 없습니다.

나는이 코드를 작성/테스트하는 데 사용한 스프레드 시트에 public link을 만들었습니다. 자유롭게 사용해보십시오.