Проверка данных выбор нескольких элементов из разных списков значений - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно выбрать несколько значений из раскрывающегося меню в электронных таблицах Google, используя проверку данных, но мне также нужно иметь возможность переключаться между различными списками проверки с разными значениями в них.Я попробовал скрипт, созданный Жаном-Пьером Верхулстом, который работает путем создания боковой панели с тремя вариантами списков для выбора, каждый список содержит различный набор значений, но он не вводит проверенные значения из списка проверки боковой панели в активнуюячейка.

Этот лист Google содержит скрипт.https://docs.google.com/spreadsheets/d/1zX4ArXsVjcYDqVpn6Olb5FGctdpmsTvIbbykNmxQXLI/edit?usp=sharing Значения проверки установлены на вкладке VALIDATION.Вкладки dataSheet1 и dataSheet2 являются примерами того, как должен выглядеть конечный результат.

SERVER.gs code:

/**
* Change the variable validation if needed
*/
var validation = {
sheet: 'VALIDATION',
userProperties: PropertiesService.getUserProperties()
}


function validOne() {


validation.userProperties.setProperty("range", "A2:A")
showSidebar();
}


function validTwo() {
validation.userProperties.setProperty("range", "B2:B")
showSidebar();
}


function validThree() {
validation.userProperties.setProperty("range", "C2:C")
showSidebar();
}


/**
* Creates a menu entry in the Google Docs UI when the document is opened.
*
* @param {object} e The event parameter for a simple onOpen trigger. To
* determine which authorization mode (ScriptApp.AuthMode) the trigger is
* running in, inspect e.authMode.
*/
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('Sidebar')
.addItem('List 1', 'validOne')
.addItem('List 2', 'validTwo')
.addItem('List 3', 'validThree')
.addToUi();
}


/**
* Opens a sidebar in the document containing the add-on's user interface.
*/


function showSidebar() {
SpreadsheetApp.getUi()
.showSidebar(HtmlService.createTemplateFromFile('SIDEBAR')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('Multiple selector'));
}


function getOptions() {
Logger.log(validation.range)
return SpreadsheetApp.getActive()
.getSheetByName(validation.sheet)
.getRange(validation.userProperties.getProperty("range"))
.getValues()
.filter(String)
.reduce(function(a, b) {
return a.concat(b)
})
}


function process(arr) {
arr.length > 0 ? SpreadsheetApp.getActiveRange()
.clearContent()
.setValue(arr.join(", ")) :
SpreadsheetApp.getUi()
.alert('No options selected')
}


function include(File) {
  return HtmlService.createHtmlOutputFromFile(File).getContent();
};

SIDEBAR.html code:

<!DOCTYPE html>
<html>
<head> 
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
    <?!=include( 'CSS'); ?>
    <?!=include( 'javaScript'); ?>

</head>
<body>
    <div class="container"></div>
    <div class="buttons">
        <p>     
        <button class="action" id="action">Fill active cell</button>
        <button class="secondary" id="btn">Rebuild options</button>
        </p>
    </div>

</body>
</html>

javaScript.html code:

<!-- SCRIPTGEDEELTE -->
<!-- Importeer jQuery (extern), Moment en semJs(intern) libraries -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>

        $(document).ready(function() {

            createList();

            $("#action").click(function() {
                google.script.run.withSuccessHandler(removeSelectedOptions).removeSelected()
                selected.length = 0;
            })

            $("#btn").click(function() {
                createList();
            });
        });

        function options(arr) {

            $(".container").empty();

            if (arr && arr.length > 0) {

                $(arr).each(function(i, el) {
                    $(".container").append('<div class="field"><div class="ui checkbox"><input type="checkbox" name="sel" value="' + el + '"><label>' + el + '</label></div></div>')
                });

            } else {
                $(".container").append('<b>No options left.</b><br>To continue, rebuild the options list.')
                $('#action').hide();
            }
        }

        function createList(arr) {
            google.script.run.withSuccessHandler(options).getOptions(arr);
        }

        function removeSelectedOptions(answer) {

            var checked, unchecked, arr; 

            checked = [];
            unchecked = [];
            $('input[type=checkbox]').each(function () { 
            this.checked ? checked.push($(this).val()) : unchecked.push($(this).val());
            $(this).prop("checked", false);
            })
            arr = [checked, unchecked]
            google.script.run.process(arr[0])
            if (answer) {
                createList(arr)
            }
        }
    </script>

У меня нет никаких знаний в области сценариев или программирования, поэтому я прошу вашей помощи, и если вы могли бы взглянуть на сценарий и выяснить проблему, онбудет спасением для меня.

edit: Нужна помощь с: Выбранные значения из списка проверки боковой панели не заполняются в активной ячейке.

Спасибо!

Дан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...