실행하면 선택되어 있는 체크박스가 반전되도록 합니다.

예제는 다음에 있습니다.
https://docs.google.com/spreadsheets/d/1MbsSABTjB1bvNUXTC8Ur5EJY65YkJSwRa0GMN2JDxIE/edit#gid=1459606208
수동으로 실행
첫번째 방법은 메뉴에서 명령을 선택하여 수동으로 처리하는 방법입니다.

/*
* 수동 실행
* toggleCheckbox 와 같으나 getDataRange를 사용하지 않고
* 영역을 직접 지정함
* 첫행의 체크박스를 누르는 이벤트로 처리할 시 주석 부분을 수정
*/
function toggleCheckBoxManual(e)
{
//var sheet = e.range.getSheet();
//if( sheet.getName() !="체크박스토글") return;
//if(e != null && !(e.range.getRow() === 1 && e.range.getColumn() === 1)) return;
var sheet = SpreadsheetApp.getActive().getSheetByName("체크박스토글"); // 이벤트 시 삭제
sheet.setActiveRange(sheet.getRange("A1"));
var checkboxes = sheet.getRange("A2:A"); // 체크 박스 영역
var rows = checkboxes.getHeight(); // 체크박스 줄 수
var checkbox = checkboxes.getValues();
var values = new Array(rows); // 2차원 배열 만들기
for (var row = 0; row < rows; row++)
{
values[row] = new Array(0); // 2차원 배열
if (checkbox[row][0] === true) {
values[row][0] = false;
} else {
values[row][0] = true;
}
}
checkboxes.setValues(values);
}
getDataRange() 함수로 데이터 영역을 찾지 않고 직접 영역을 설정합니다.
체크박스 영역은 var checkboxes = sheet.getRange("A2:A"); 로 지정되는데 A2:A 는 줄 끝까지 자동지정됩니다.
checkboxes.getHeight() 로 줄 수를 알 수 있습니다.
두번째 방법은 1행 1열에 있는 체크박스에 변경 이벤트가 발생했을 때 동작합니다.
구현 방법은 전체선택/해제 와 동일합니다. getDataRange로 영역을 검색해서 체크 박스를 토글시킵니다.
체크되어 있는 것은 체크 해제 그리고 체크 해제된 것은 체크
/*
* 체크박스 토글 스위치
* 첫 행의 체크박스를 클릭하면 선택 되어 있는 체크 박스를 토글 함
*
* ScriptApp.newTrigger("toggleCheckbox").forSpreadsheet(SpreadsheetApp.getActive())
* .onEdit().create();
*/
function toggleCheckbox(e)
{
var sheet = e.range.getSheet();
if( sheet.getName() !="체크박스토글") return;
// 이벤트가 동작하고 현재 셀이 1행 1열이 아니면 그냥 종료
if(e != null && !(e.range.getRow() === 1 && e.range.getColumn() === 1)) return;
var checkRange= sheet.getDataRange() // 데이터가 들어있는 테이블
var values = checkRange.getValues(); // 값만 취함
values.forEach(function (row, rowinx)
{
if( values[rowinx][0] == false)
values[rowinx][0] = true;
else
values[rowinx][0] = false;
});
checkRange.setValues(values);
}
체크박스다루기.gs 파일에 setUpEditTrigger() 함수를 실행시켜서 트리거를 등록해줘야 동작합니다.
/* 트리거등록 */
function setUpEditTrigger()
{
if(!checkTrigger("toggleCheckbox")) // lib.gs 에 있음
{
ScriptApp.newTrigger("toggleCheckbox").forSpreadsheet(SpreadsheetApp.getActive()).onEdit().create();
}
}
왼쪽 시계모양을 클릭한다음 다음과 같이 수동으로 생성해줘도 됩니다.

'컴퓨터 활용 > 구글스프레드시트 응용' 카테고리의 다른 글
구글 스프레드 시트에서 체크박스 다루기 4 - 선택 후 라인삭제하기 (0) | 2022.08.14 |
---|---|
구글 스프레드 시트에서 체크박스 다루기 3 - 라디오박스 구현 (0) | 2022.08.13 |
구글 스프레드 시트에서 체크박스 다루기 1 - 전체 선택, 해제 / 구글 앱스 스크립트 (0) | 2022.08.10 |
구글 앱스 스크립트로 차트 그리기 (0) | 2022.07.15 |
구글 스프레드시트에서 주식펀드 기간 수익률 비교 차트로 그리기 (0) | 2022.07.10 |