필자는 영어공부에 구글시트 Google Sheets를 적극 활용한다. 익힐 필요가 있는 단어나 표현이 있으면 구글시트에 누적적으로 추가하며 그것들을 장기적으로 관리하며 체화하는 것이다.
그런데 영단어 목록이 수백개 이상 되면, 가끔 그것들은 무작위적으로 배열해서 시험치듯 쭉 훑어보고 싶을 때가 있다. 그렇게 봤을때 여전히 모르겠는 것들을 별도 표시해서 다시 공부하려는 목적에서 그런것이다. 하지만 구글시트에서는 기본적으로 ABC순으로 정렬하는것 말곤 특별한 정렬기능이 없어 이런 필요를 충족시킬 수 없었다.
하지만 다음 코드를 활용하면 가능하다 :
function shuffleRowsExceptFirst() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // get the active sheet
var range = sheet.getDataRange(); // get the data range
var richTextValues = range.getRichTextValues(); // get the data rich text values
// create an array of row indexes starting from the second row
var rows = [];
for (var i = 1; i < richTextValues.length; i++) {
rows.push(i);
}
// shuffle the row indexes
for (var i = rows.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = rows[i];
rows[i] = rows[j];
rows[j] = temp;
}
// create a new array with rows in the shuffled order, keeping the first row as is
var newRichTextValues = [];
newRichTextValues.push(richTextValues[0]); // preserve the first row
for (var i = 0; i < rows.length; i++) {
newRichTextValues.push(richTextValues[rows[i]]);
}
// set the range values to the new shuffled row order
range.setRichTextValues(newRichTextValues);
}
다음순서를 따라가면 위 코드로 열row 을 무작위 배열 할 수 있다 :
-
- 구글시트 메뉴 → Extensions → Apps Script 실행
- code block 란에 위 스크립트를 복붙하고 save 플로피디스크 모양 아이콘
- ‘▷Run’ 클릭하여 실행
참고로, 이 코드는 무작위 배열에서 첫번째 열은 제외한다. 필자의 영단어 sheets에서 1열은 단어/발음/뜻/의미 등으로 행을 구분하기위한 제목들이 적혀있어, 이 첫번째열은 고정시킬 필요가 있었기 때문이다.
또한, 위 코드에서 사용된 ‘range.getRichTextVales’는 하이퍼링크를 보존하기 위한 코드이다. 필자의 영단어 sheet에는 영단어와 관련한 이미지 link나 발음을 위해 유튜브 link를 걸어놓기도 했는데, 위 코드는 재배열 하더라도 그러한 링크를 보존해주는 역할을 한다.
필자는 아직 하나의 구글시트에서 이런식으로 여러개의 코드를 작성해서 쓴적이 없기에, 코드가 3~4개 늘어나는 경우 어떻게 관리하는지 잘 모른다. 하지만 우선은 이 코드를 ‘shuffleRows.gs’라는 이름으로 저장해놓았고, 이것은 애초에 이것을 생성한 구글시트 문서에서 Apps Script를 실하면 언제든지 실행 할 수 있다.
■