Заполнение раскрывающегося списка из диапазона создания набора данных - PullRequest
0 голосов
/ 26 февраля 2020

TLDR: скрипт для заполнения раскрывающегося списка, создающий целые числа, которые go от 0 до соответствующего количества запаса из набора данных.

Я пытаюсь создать рабочую книгу, которую пользователи могут выбрать из раскрывающегося списка группы. элементов (лист1, столбец A), а затем поиск строки B, который выбрал элемент на листе «Набор данных», и возвращает это значение с целыми числами, которые go из 0, к соответствующему общему количеству запаса в (столбец «Лист данных» * 1030) *)

вот пример электронной таблицы

все это работает благодаря @ iamblichus и @ Rafa Guillermo

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

Я пытался написать какой-то код (строка 39 вниз), но я застрял.

Любая помощь будет принята с благодарностью.

    function generateDropdowns() {

//sets all the dropdowns from items non selected

  // Get the different values in column C (stock quantities):
  var firstRow = 3;
  var firstCol = 3;
  var numRows = dataSetSheet.getLastRow() - firstRow + 1;
  var numRowsfill = fillSheet.getLastRow() - firstRow + 1; 
  var stockQuantities = dataSetSheet.getRange(firstRow, firstCol, numRows).getValues();
  var stockNames = dataSetSheet.getRange(firstRow, firstCol - 1, numRows).getValues();
  var itemName = fillSheet.getRange(3, 1, numRowsfill).getValues();

  // Iterate through all values in volumn:
  for (var i = 0; i < stockQuantities.length; i++) {
    Logger.log(stockNames);
    Logger.log(stockQuantities);
    var stockQuantity = stockQuantities[i][0];
    var values = [];

    // Create the different options for the dropdown based on the value in column C:
    if (stockNames[i] == itemName[i]) {
      for (var j = 0; j <= stockQuantity; j++) {
        values.push(j);
      } 
          // Create the data validation:
    var rule = SpreadsheetApp.newDataValidation().requireValueInList(values).build();
    // Add the data validation to the corresponding cell in column B:
    var dropdownCell = fillSheet.getRange(i + firstRow, 2).setDataValidation(rule);

   }    
  }
}

Прошлые публикации Выпадающее меню автоматически генерирует диапазон на основе общего количества введите описание ссылки здесь

1 Ответ

0 голосов
/ 26 февраля 2020

Создание раскрывающегося списка из отредактированной ячейки:

В примере, предоставленном @ Rafa Guillermo , элементы, которые просто записываются и не выбираются из раскрывающегося списка, следуют тому же рабочему процессу, что и выбранные элементы. из выпадающего списка. Скрипт просто смотрит на то, какое значение имеет отредактированная ячейка, независимо от того, выбрана ли она из раскрывающегося списка или нет. Это можно заметить, если вы напишите значение в столбце A (от Sheet 1): появится соответствующий раскрывающийся список в столбце B.

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

Создание всех выпадающих списков:

Если что вместо этого вы хотите автоматически генерировать все выпадающие списки из значений в Sheet 1, а не только те, которые соответствуют отредактированной ячейке, вы можете сделать это вместо этого (проверьте встроенные комментарии):

function generateDropdowns() {
  var firstRow = 3;
  var firstCol = 3;
  var numRows = dataSetSheet.getLastRow() - firstRow + 1;
  var numRowsfill = fillSheet.getLastRow() - firstRow + 1; 
  var stockQuantities = dataSetSheet.getRange(firstRow, firstCol, numRows).getValues().map(function(quantity) {
    return quantity[0]; // 1-D array of stock quantities
  });
  var stockNames = dataSetSheet.getRange(firstRow, firstCol - 1, numRows).getValues().map(function(stockName) {
    return stockName[0]; // 1-D array of stock names
  });
  var itemNames = fillSheet.getRange(3, 1, numRowsfill).getValues().map(function(itemName) {
    return itemName[0]; // 1-D array of items
  });
  for (var i = 0; i < itemNames.length; i++) { // Iterate through all items in Sheet 1
    if (stockNames.indexOf(itemNames[i]) !== -1) { // Check if item shows up in stock names
      var stockQuantity = stockQuantities[stockNames.indexOf(itemNames[i])]; // Get the stock quantity corresponding to this item
      var values = [];
      for (var j = 0; j <= stockQuantity; j++) {
        values.push(j); // Generate possible values for dropdown
      }
      var rule = SpreadsheetApp.newDataValidation().requireValueInList(values).build();
      var dropdownCell = fillSheet.getRange(i + firstRow, 2).setDataValidation(rule);      
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...