Есть такая задача: автоматическая рандомизация случаев на две группы. Примерно таким манером.
Если например A1 пустая, то ничего не делать. Если В A1 что-то появляется, то поставить в G1 случайным образом 0 или 1. Однажды записанная G1 меняться более при обновлении документа не должна. И все это растянуть для всех ячеек Аn Gn.
Уважаемый _Boroda_ предложил прекрасное решение для Excel. К сожалению его нельзя использовать для Excel online, т.к. там еще не сделали поддержку скриптов. Но скрипты есть в гуглотаблицах. Подскажите, возможно переложить этот код туда? В идеале хотелось бы сделать онлайн форму, данные из которой попадают в таблицу и рандомизируются. Т.о. несколько разных человек смогут вносить данные, а на результат рандомизации повлиять не смогут.
Есть такая задача: автоматическая рандомизация случаев на две группы. Примерно таким манером.
Если например A1 пустая, то ничего не делать. Если В A1 что-то появляется, то поставить в G1 случайным образом 0 или 1. Однажды записанная G1 меняться более при обновлении документа не должна. И все это растянуть для всех ячеек Аn Gn.
Уважаемый _Boroda_ предложил прекрасное решение для Excel. К сожалению его нельзя использовать для Excel online, т.к. там еще не сделали поддержку скриптов. Но скрипты есть в гуглотаблицах. Подскажите, возможно переложить этот код туда? В идеале хотелось бы сделать онлайн форму, данные из которой попадают в таблицу и рандомизируются. Т.о. несколько разных человек смогут вносить данные, а на результат рандомизации повлиять не смогут.higet
Если красивое решение с онлайн-формой в принципе не невозможно, согласен на фриланс. [moder]А в чем связь? Вы платите только за некрасивые решения? [/moder] не невозможно = возможно. Sorry если сложно формулирую
Если красивое решение с онлайн-формой в принципе не невозможно, согласен на фриланс. [moder]А в чем связь? Вы платите только за некрасивые решения? [/moder] не невозможно = возможно. Sorry если сложно формулируюhiget
Сообщение отредактировал higet - Четверг, 21.04.2016, 11:06
Теперь если набиваю форму, то не работает. если ставлю в таблицу сам, то работает. Думаю потому что форма забивает целую строку. Может быть ответ пускай уходить в лист2, тогда сработает само?
Теперь если набиваю форму, то не работает. если ставлю в таблицу сам, то работает. Думаю потому что форма забивает целую строку. Может быть ответ пускай уходить в лист2, тогда сработает само?higet
if (!rng.getValue() || rng.offset(0, 1).getValue()) return;
тоже сначала так написала, но тогда при вводе 0 в столбец А ничего не происходит и еще 0 в В иногда на 1 заменяются. Не проверяла, но наверное так надо [vba]
Код
if (!rng.getValue().toString() || rng.offset(0, 1).getValue().toString()) return;
[/vba]
А вот за e.range; спасибо, не знала что так можно!
higet, задавайте вопросы по теме здесь, не нужно в личку писать. А комментарии все те же:
if (!rng.getValue() || rng.offset(0, 1).getValue()) return;
тоже сначала так написала, но тогда при вводе 0 в столбец А ничего не происходит и еще 0 в В иногда на 1 заменяются. Не проверяла, но наверное так надо [vba]
Код
if (!rng.getValue().toString() || rng.offset(0, 1).getValue().toString()) return;
[/vba]
А вот за e.range; спасибо, не знала что так можно!
higet, задавайте вопросы по теме здесь, не нужно в личку писать. А комментарии все те же:
Есть один метод лечения одной болезни, при котором одну манипуляцию иногда выполняют, иногда не выполняют. Не только у нас. Во всем мире так. Есть ситуации, когда это делать надо, но в больше чем половине случаев делают/не делают просто по настроению. Недавно обсуждали этот вопрос с представителями нескольких отделений разных больниц неформально. Идея в том, чтобы на неоднозначных ситуациях сделать что-то вроде рандомизированного исследования. Нигде ничего не оформлять, просто поискового. Никакой интуиции. В форму забивается ФИО, возраст, оценка состояния по одной из классификаций. А в таблице, доступной только для чтения (чтобы выключить излишнюю интуицию) появляется rnd ответ делать/не делать. Если вдруг что-то получится могу вас с статью включить в качестве участников
Есть один метод лечения одной болезни, при котором одну манипуляцию иногда выполняют, иногда не выполняют. Не только у нас. Во всем мире так. Есть ситуации, когда это делать надо, но в больше чем половине случаев делают/не делают просто по настроению. Недавно обсуждали этот вопрос с представителями нескольких отделений разных больниц неформально. Идея в том, чтобы на неоднозначных ситуациях сделать что-то вроде рандомизированного исследования. Нигде ничего не оформлять, просто поискового. Никакой интуиции. В форму забивается ФИО, возраст, оценка состояния по одной из классификаций. А в таблице, доступной только для чтения (чтобы выключить излишнюю интуицию) появляется rnd ответ делать/не делать. Если вдруг что-то получится могу вас с статью включить в качестве участников higet
но тогда при вводе 0 в столбец А ничего не происходит и еще 0 в В иногда на 1 заменяются
Согласен, не пошевелил мозгами про 0. Да, думаю, что с toString() будет в самый раз - универсальненько так. Только .getValues().toString(), у getValue() без s toString'а не наблюдается в списке свойств
но тогда при вводе 0 в столбец А ничего не происходит и еще 0 в В иногда на 1 заменяются
Согласен, не пошевелил мозгами про 0. Да, думаю, что с toString() будет в самый раз - универсальненько так. Только .getValues().toString(), у getValue() без s toString'а не наблюдается в списке свойств Gustav
открыл и форму В таблице с подключенной формой получается скрипт не работает. Вариант от Gustav кстати что-то переключает, но только при редактировании таблицы. Если через форму добавлять - ничего не меняется. Я вот думаю: в настройках формы тоже есть окошко для скрипта. Может быть туда код писать?
открыл и форму В таблице с подключенной формой получается скрипт не работает. Вариант от Gustav кстати что-то переключает, но только при редактировании таблицы. Если через форму добавлять - ничего не меняется. Я вот думаю: в настройках формы тоже есть окошко для скрипта. Может быть туда код писать?higet
А каков вообще сценарий пользования этим Вашим хозяйством? Рандомизироваться надо непременно при добавлении новой строки? Или можно, например, в таблице сделать команду меню, которую будет нажимать ответственный анализатор-рандомизатор перед неким действом, когда колонка G уже должна быть заполнена, и все добавленные строки после последнего нажатия этого меню будут заполняться в этом поле? Можно еще на таймер повесить, скажем, раз в полчаса или реже/чаще проверять и заполнять пустые "рандомы" (пустые ячейки в колонке G).
А может просто вообще заранее сгенерировать длинный столбец из 0 и 1 и использовать его значения по порядку в процессе заполнения таблицы? Причем, можно обеспечить чтобы подряд идущих 0 или 1 было не больше двух. Тогда для любого четного количества случаев будет абсолютно одинаковое количество случаев в обеих "корзинах".
А каков вообще сценарий пользования этим Вашим хозяйством? Рандомизироваться надо непременно при добавлении новой строки? Или можно, например, в таблице сделать команду меню, которую будет нажимать ответственный анализатор-рандомизатор перед неким действом, когда колонка G уже должна быть заполнена, и все добавленные строки после последнего нажатия этого меню будут заполняться в этом поле? Можно еще на таймер повесить, скажем, раз в полчаса или реже/чаще проверять и заполнять пустые "рандомы" (пустые ячейки в колонке G).
А может просто вообще заранее сгенерировать длинный столбец из 0 и 1 и использовать его значения по порядку в процессе заполнения таблицы? Причем, можно обеспечить чтобы подряд идущих 0 или 1 было не больше двух. Тогда для любого четного количества случаев будет абсолютно одинаковое количество случаев в обеих "корзинах".Gustav
Лучше сразу при добавлении строки. Заполнять получается будут разные люди, они должны сразу получить ответ что делать и не иметь возможности на это решение влиять. А то начнется: мне кажется что тут надо было и проч. факторы, которые нарушат чистоту эксперимента.
Лучше сразу при добавлении строки. Заполнять получается будут разные люди, они должны сразу получить ответ что делать и не иметь возможности на это решение влиять. А то начнется: мне кажется что тут надо было и проч. факторы, которые нарушат чистоту эксперимента.higet
На получение следующей строки кода потратил практически целый день... Перекопав тонны сопутствующей информации... Записывайте скорее! :)
[vba]
Код
function onSubmit(e) {
e.range.getCell(1, 1).offset(0, 6).setValue(Math.round(Math.random())); // 6 - смещение для колонки G относительно колонки A
}
[/vba] Эта функция помещается всё в тот же в скриптовый проект ТАБЛИЦЫ (не формы!). Там же ее надо будет зарегистрировать как триггер по меню: Ресурсы \ Триггеры текущего проекта. И далее там: onSubmit, Из таблицы, Отправка формы.
они должны сразу получить ответ что делать и не иметь возможности на это решение влиять.
А вот с этим пока сложнее. Пока неочевиден способ отобразить пользователю какое-нибудь всплывающее окошко с назначенным числом рандомизации во время нахождения на экране открытой формы. Однако, можно попробовать послать подобное сообщение по почте. Почта устроит?
На получение следующей строки кода потратил практически целый день... Перекопав тонны сопутствующей информации... Записывайте скорее! :)
[vba]
Код
function onSubmit(e) {
e.range.getCell(1, 1).offset(0, 6).setValue(Math.round(Math.random())); // 6 - смещение для колонки G относительно колонки A
}
[/vba] Эта функция помещается всё в тот же в скриптовый проект ТАБЛИЦЫ (не формы!). Там же ее надо будет зарегистрировать как триггер по меню: Ресурсы \ Триггеры текущего проекта. И далее там: onSubmit, Из таблицы, Отправка формы.
они должны сразу получить ответ что делать и не иметь возможности на это решение влиять.
А вот с этим пока сложнее. Пока неочевиден способ отобразить пользователю какое-нибудь всплывающее окошко с назначенным числом рандомизации во время нахождения на экране открытой формы. Однако, можно попробовать послать подобное сообщение по почте. Почта устроит?Gustav
Всё-таки немножко дорисую код, чтобы отразить момент с почтой. Обратите внимание, что можно посылать на более, чем один адрес (через запятую). Письма респондентам придут от имени редактора-владельца формы. [vba]
Код
function onSubmit(e) {
var rgroup = Math.round(Math.random()); e.range.getCell(1, 1).offset(0, 6).setValue(rgroup); // 6 - смещение для колонки G GmailApp.sendEmail("addr1@mail.ru,addr2@mail.ru", "Назначение группы рандомизации", "Группа: " + rgroup.toString()); }
[/vba] И всё. На сегодняшний день почта - это единственный автоматический способ оповестить заполнителя формы об итогах заполнения (ну, и, как мы выяснили, можно еще в саму таблицу пойти подглянуть, если есть доступ к ней).
Как написано в документации Google, для их Таблиц, Документов и Форм можно использовать всплывающие окна сообщений и диалоги. НО! В случае Форм, увы, это возможно только в режиме редактирования макета формы владельцем или другими пользователями с правами редакторов (хотя, признаюсь, не очень понимаю, зачем эти сообщения нужны редакторам). В режиме же показа формы респонденту в процессе анкетирования эти элементы интерфейса не показываются, а соответствующие операторы в коде скрипта игнорируются.
Всё-таки немножко дорисую код, чтобы отразить момент с почтой. Обратите внимание, что можно посылать на более, чем один адрес (через запятую). Письма респондентам придут от имени редактора-владельца формы. [vba]
Код
function onSubmit(e) {
var rgroup = Math.round(Math.random()); e.range.getCell(1, 1).offset(0, 6).setValue(rgroup); // 6 - смещение для колонки G GmailApp.sendEmail("addr1@mail.ru,addr2@mail.ru", "Назначение группы рандомизации", "Группа: " + rgroup.toString()); }
[/vba] И всё. На сегодняшний день почта - это единственный автоматический способ оповестить заполнителя формы об итогах заполнения (ну, и, как мы выяснили, можно еще в саму таблицу пойти подглянуть, если есть доступ к ней).
Как написано в документации Google, для их Таблиц, Документов и Форм можно использовать всплывающие окна сообщений и диалоги. НО! В случае Форм, увы, это возможно только в режиме редактирования макета формы владельцем или другими пользователями с правами редакторов (хотя, признаюсь, не очень понимаю, зачем эти сообщения нужны редакторам). В режиме же показа формы респонденту в процессе анкетирования эти элементы интерфейса не показываются, а соответствующие операторы в коде скрипта игнорируются.Gustav