Заполнить выпадающий список из выбранного элемента - PullRequest
1 голос
/ 29 января 2020

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

вот образец таблицы

Я получил несколько потрясающий код из @ iamblichus , который заполнит выпадающие списки из соответствующего количества запаса см. его код здесь , который я в некоторой степени реализовал Здесь с использованием формулы запроса для поиска групповые складские запасы. Я не уверен, как сделать это на двух листах.

1 Ответ

1 голос
/ 29 января 2020

Ответ:

Расширяя код, который @ iamblichus предоставил здесь , вы можете указать Листы, из которых можно получать данные и использовать Триггер onEdit () автоматически меняет раскрывающийся список при редактировании ячейки.

Код:

Прикрепите его к предоставленной вами пробной таблице:

function onEdit(e) {
  var ss = SpreadsheetApp.getActive(); // Get the spreadsheet bound to this script
  var dataSetSheet = ss.getSheetByName("Dataset"); // Get the sheet called "Working with script" (change if necessary)
  var fillSheet = ss.getSheetByName("Sheet 1");

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

  // Iterate through all values in column:
  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] == e.value) {
      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:
      fillSheet.getRange(e.range.getRow(), 2).clear();
      var dropdownCell = fillSheet.getRange(e.range.getRow(), 2).setDataValidation(rule);
    }
  }
}

Что стоит отметить:

Я поместил это как функцию onEdit(), потому что SpreadsheetApp вызывается в Режим только для чтения , когда он внутри пользовательской функции и поэтому нет set*() методы могут быть вызваны. Это включает в себя setDataValidation().

Согласно документации поддерживается служба электронных таблиц, однако в разделе «Примечания» она гласит:

Только для чтения (может использоваться большинство методов get*(), но не set*() ). Не удается открыть другие электронные таблицы (SpreadsheetApp.openById() или SpreadsheetApp.openByUrl()).

Надеюсь, это полезно для вас!

Ссылки:

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