Как создать раскрывающийся список внутри ячейки, который будет создавать и синхронизировать новые листы Google? - PullRequest
1 голос
/ 16 октября 2019

Мне интересно, как сделать следующее в Google Sheets ...

  1. Создать раскрывающийся список в ячейке, чтобы выбранные мной значения равнялись

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

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

1 Ответ

1 голос
/ 17 октября 2019

При вводе раскрывающегося значения в столбце, если это первое использование этого раскрывающегося значения, необходимо создать лист с именем раскрывающегося значения. Если это не первое использование, то никаких действий (кроме заполнения раскрывающегося списка) не существует.

Для этого требуется сочетание следующих факторов: обнаружение раскрывающегося списка, обеспечение его на нужном листе, столбце истрока, определяющая, использовалось ли значение ранее и, если нет, для создания нового листа. Вероятно, есть много способов сделать это;рассмотрим следующий только один пример.

В этом примере соответствующий лист для просмотра - «Лист1», а соответствующий столбец - «Столбец А». Существует одна строка заголовка, и в строках ниже строки заголовка есть выпадающие ячейки.

Логический поток:

  • использует простой триггер onEdit (e) для обнаружения ввода данных.
  • использование объектов событий для определения отредактированного столбца, строки, имени листа и значения.
  • использование других переменных для управления количествомстроки заголовка и соответствующий столбец для просмотра.
  • создайте оператор IF, чтобы подтвердить, что редактирование было в соответствующем листе, столбце и строке, затем
    • получите диапазон и значения вСтолбец A - включите строку 1, чтобы setValues() всегда применял
    • , чтобы сгладить результирующий 2D-массив с 1D, используя Javascript map, метод
    • , найдите первый иПоследнее появление раскрывающегося значения в диапазоне с использованием Javascript indexOf и lastIndexOf
    • , если первое и последнее значения совпадают, то это должно быть первое и единственноеиспользовать раскрывающееся значение, поэтому создайте новый лист insertSheet (sheetName) , где "sheetname" - это значение раскрывающегося списка.

function onEdit(e){

  //so5842003001

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheetname = "Sheet1";
  var sheet = ss.getSheetByName(sheetname);

  //Logger.log(JSON.stringify(e));//DEBUG

  var eColumn = e.range.getColumn();
  var eRow = e.range.getRow();
  var eSheet = e.source.getSheetName();
  var eValue = e.value;
  var headerrow = 1; // number of header rows
  var column = 1; // the data validation is in Column A
  //Logger.log("DEBUG: column = "+eColumn+", sheet = "+eSheet+", Row = "+eRow+", header = "+headerrow);

  if (sheetname === eSheet && eColumn === column && eRow > headerrow){
    // column. row, and sheet are OK
    // Logger.log("DEBUG: running the if");

    //get the last row
    var rows = sheet.getLastRow();
    // Logger.log("DEBUG: last row = "+rows);

    //define the range
    var columnRange = sheet.getRange(1, column, rows);
    // Logger.log("DEBUG: range = "+columnRange.getA1Notation());

    // get the values
    var columnvalue = columnRange.getValues();
    // Logger.log(columnvalue); // DEBUG

    // flatten the 2D array to 1D
    var  column1D= columnvalue.map(function(d){return d[0];});//[[d],[d],[d]]=>[d,d,d]
    // Logger.log(column1D);// DEBUG

    // get the first time this value appears in the range
    var result =  column1D.indexOf(eValue);
    // get the last time this value appears in the range
    var lastresult = column1D.lastIndexOf(eValue);
    // Logger.log("DEBUG: result = "+result+", lastresult = "+lastresult)

    // if the first time equals the last time, then this must be the first time it has appeared
    // so insert the sheet
    if (result === lastresult){
      //Logger.log("first use of this value"); // DEBUG

      // insert the sheet named for the cell
      ss.insertSheet(eValue);
    }
  }
  else {
    // Logger.log("DEBUG: running the else");
  }
}

Снимок экрана макета ответа

Screenshot

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