
Vocabluary trainer — это маленький скрипт для Гугл Таблиц, который помогает запоминать новые слова. Его прелесть в том, что мы получаем всю мощь таблиц для составления и форматирования базы данных + сразу проверяем себя, не выходя из нее. Проверка слов происходит путём ввода точного перевода, поэтому не запомнить будет просто невозможно!
<aside> 💡 Есть более наглядно? Оф. справка Видосик
</aside>
<aside> 💡 Обратите внимание, что в зону выделения должны попасть 2 столбца: слово и перевод. Иначе вылетит ошибка.
</aside>
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
let ui = SpreadsheetApp.getUi()
let menu = ui.createMenu('🧙 Vocabulary trainer')
menu.addItem('Start','shuffle')
// menu.addItem('Help','shuffle')
menu.addToUi()
let answers = []
let selected = sheet.getSelection().getActiveRange().getValues()
if(selected[0].length !== 2){
throw new Error('Please use only 2 column for selection')
}
function onOpen() {
shuffle()
}
function shuffle() {
let m = selected.length, t, i
while (m) {
i = Math.floor(Math.random() * m--)
t = selected[m]
selected[m] = selected[i]
selected[i] = t
}
start()
}
function start() {
for(let i = 0; i < selected.length; i++){
let question = ui.prompt(`Question ${i+1}/${selected.length}`, `${selected[i][1]}`, ui.ButtonSet.OK)
if(question.getSelectedButton() == ui.Button.CLOSE){
break
}
answers.push(question.getResponseText())
}
result()
}
function result() {
if (SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Answers") === null){
SpreadsheetApp.getActiveSpreadsheet().insertSheet('Answers')
}
const answerSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Answers')
answerSheet.getDataRange().clear()
let sum = 0
for(let i = 0; i < selected.length; i++){
answerSheet.getRange(`A${i + 1}`).setValue(selected[i][1])
answerSheet.getRange(`B${i + 1}`).setValue(answers[i])
if(selected[i][0] != answers[i]){
answerSheet.getRange(`A${i + 1}:B${i + 1}`).setBackground('Tomato')
} else{
answerSheet.getRange(`A${i + 1}:B${i + 1}`).setBackground('LawnGreen')
sum++
}
}
answerSheet.getRange(`A${selected.length + 1}`).setValue('Grade:').setFontWeight("bold")
answerSheet.getRange(`B${selected.length + 1}`).setValue(`${sum}/${selected.length}`).setFontWeight("bold")
}