Скрипт для выбора случайных данных из списка при нажатии кнопки

Я создаю электронную таблицу, которая может автоматически выбирать случайные данные ячейки из определенного столбца, когда я нажимаю кнопку. Однако я не могу понять сценарий.

Благодаря некоторым друзьям я попробовал несколько вариантов, которые включают использование дополнений, но в идеале я не хочу использовать что-либо подобное, поскольку оно должно быть пригодным для использования, если люди хотят сделать копию без дополнений.

Что я хочу сделать, так это нажать определенную кнопку, а затем в соседней ячейке отобразится случайное значение из набора данных, указанного в списке.

У меня два листа. «Интерфейс» и «Под капотом» — довольно очевидны, в интерфейсе есть кнопки, а под капотом — данные.

Вот некоторый код, который я нашел в другом месте в Интернете, пытаясь использовать его в качестве основы.

  function random() {
      var ss=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
      var val=ss.getRange("A1").getValue()
      var clr =ss.getRange("A1").clearContent()
      ss.getRange("A1").setValue(val)
    }

Чтобы бросить пример там -

A2-A33 - наш набор данных (лист под капотом)

Я нарисовал кнопку и хочу, чтобы случайный выбор отображался в ячейке D17 (интерфейс).

Фиктивные данные: https://docs.google.com/spreadsheets/d/1HMmT_dx2_zeDKozEeDElYLaZutc4ruSwjjvVjyGg-Ls/edit?usp=sharing

Может ли кто-нибудь рассказать мне, как это сделать?


person Jlombard_    schedule 15.09.2019    source источник
comment
Я не знаю, что вы имеете в виду под случайным выбором. Вы хотите случайную строку, случайный столбец или случайную ячейку. Что вы пытаетесь достичь?   -  person Cooper    schedule 15.09.2019
comment
Извинения, если я не сделал это достаточно ясно. У меня есть список данных в ячейках A2-A33 на отдельном листе (лист A) (например). На листе B у меня есть кнопка, когда я нажимаю эту кнопку, я хотел бы, чтобы случайный выбор отображался в ячейке D17 (лист B) из вышеупомянутого списка.   -  person Jlombard_    schedule 15.09.2019
comment
Да, я, наконец, понял это после просмотра электронной таблицы.   -  person Cooper    schedule 15.09.2019


Ответы (1)


Попробуй это:

function getRandomValue(searchColumn,resultCellRow,resultCellColumn) {
  var ss=SpreadsheetApp.getActive();
  var dsh=ss.getSheetByName('Interface');
  var ssh=ss.getSheetByName('UnderTheHood')
  var rg=ssh.getRange(2,searchColumn,ssh.getLastRow()-1,1);
  var vA=rg.getValues().map(function(r){return r[0]});
  while(vA[vA.length-1].length==0) {
    vA.splice(vA.length-1,1);
  }
  dsh.getRange(resultCellRow,resultCellColumn).setValue( vA[Math.floor(Math.random()*vA.length)]);
}

function generateCoach() {
  getRandomValue(10,3,4)
}

function coachBackStory() {
  getRandomValue(11,5,4)
}

function contracts() {
  getRandomValue(7,5,8);
}

Я предполагаю, что вы можете выяснить остальные функции для различных кнопок. Все, что вам нужно сделать, это указать столбец для поиска в «UnderTheHood» и ячейку для ввода ответа в «Интерфейс».

person Cooper    schedule 15.09.2019
comment
Я очень ценю, что вы помогли мне здесь, к сожалению, я получил эту ошибку TypeError: Cannot call method getRange of null. Это лист, с которым я сейчас работаю (на всякий случай, если это имеет значение). – docs.google.com/spreadsheets/d/ будет Не могли бы вы объяснить мне в этом коде, где я выбираю диапазон данных и где я выбираю ячейку вывода? - person Jlombard_; 15.09.2019
comment
Я только что внес некоторые изменения, когда понял, что мне нужно получить уникальные высоты столбцов, а не использовать sheet.getLastRow(). И я работаю с листа, который был в вашем вопросе - person Cooper; 15.09.2019
comment
По сути, вам просто нужно указать функции getRandomValue() столбец для поиска в UnderTheHood, а также строку и столбец, чтобы поместить его в интерфейс. - person Cooper; 15.09.2019
comment
Спасибо, @cooper, сейчас отдам и посмотрю, что получится! Я только изучаю этот материал, и я взялся за задачу, которая выходит за рамки моей глубины, лол. - person Jlombard_; 15.09.2019
comment
На новом листе function generateCoach() { getRandomValue(10,17,2);} А также измените UnderTheHood на UTH - person Cooper; 15.09.2019
comment
Могу я задать вам еще один вопрос? Очень очевидный при этом? В этом выражении getRandomValue(11,21,3) к чему относятся числа? Я знаю, что они относятся к строкам, столбцам и выходной ячейке, я просто не уверен в том порядке, в котором они здесь расположены, спасибо. Кроме того, отличается ли это для объединенных ячеек? или я должен избегать их? - person Jlombard_; 15.09.2019
comment
Первый параметр — 12, и это номер столбца в UTH для поиска. Второй параметр — это номер строки ячейки, в которую будет помещен результат в интерфейсе, а третий параметр — это номер столбца этой ячейки. - person Cooper; 15.09.2019
comment
Большое спасибо, сэр, на этой ноте я полагаю, что имеет смысл удалить заголовки из наборов данных UTH? иначе они были бы включены в рандомизацию, правильно? - person Jlombard_; 15.09.2019
comment
Нет, вы можете оставить заголовки, потому что я ищу от строки 2 до конца каждого столбца. - person Cooper; 15.09.2019