Вставьте новую строку и скопируйте проверку данных только из строки ниже - PullRequest
1 голос
/ 20 апреля 2019

Создание электронной таблицы «Список задач», в которой каждый раз, когда задача вводится в первую строку без заголовка (строка 2), она сначала сортируется по остальным уже введенным задачам, а затем добавляется новая строка вtop (строка 2) для следующей записи (я не женат на порядке операций, если конечный результат такой же).

Вот ссылка на электронную таблицу, если необходимо: https://docs.google.com/spreadsheets/d/1clySVeeoq1CBskDiaQywIuHZcr0zrTJIDDc1OPIc0wQ/edit?usp=sharing

Я не знаком с написанием ГАЗА, но я достаточно знаком, чтобы соединять фрагменты вместе.

Я нашел следующие фрагменты, которые почти привели меня туда, где я хочу быть, но я либо получаю как подтверждение данных, так и содержимое, либо ни того, ни другого.Все, что мне нужно, это проверка данных с пустым содержимым.

Я нашел этот вопрос заданным и ответил, но, возможно, решения устарели, потому что они не работают для меня.Или, может быть, я просто делаю что-то не так.Вот что у меня сейчас ...

Спасибо за любую помощь!

Trey

function onEdit(){
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var editedCell = sh.getActiveRange().getColumnIndex();


  // Update after "Task" column is edited
  if(editedCell == 6) { 
    sh.getRange("A2:F").sort({column: 2}).sort({column: 3}).sort({column: 1});

    var firstRow = 2;
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(1, 1);
    newRange = sh.getRange(firstRow, 1, 1, lCol);

    var rowBelow = firstRow + 1;
    var maxCols = sh.getMaxColumns();
    var rangeToCopy = sh.getRange(rowBelow, 1, 1, maxCols);
    rangeToCopy.copyTo(sh.getRange(firstRow, 1, 1, maxCols), {validationsOnly:true});    
  }
}

1 Ответ

1 голос
/ 21 апреля 2019

Я думаю, что это может быть ближе к тому, что вы хотите. Но вы ничего не сделали с формулами, и в вашем примере нет формул, что затрудняет определение того, чего вы пытаетесь достичь.

function onEdit(e){
  var sh = e.range.getSheet();
  if(e.range.columnStart == 6) { 
    sh.getRange("A2:I").sort({column: 2}).sort({column: 3}).sort({column: 1});//I extended this range all the way to cover the headers.  That may not be what you want.
    var range = sh.getRange(2, 1, 1, sh.getLastColumn());
    var formulas = range.getFormulas();
    sh.insertRowsAfter(1, 1);
    newRange = sh.getRange(2, 1, 1, sh.getLastColumn());
    var maxCols = sh.getMaxColumns();
    var rangeToCopy = sh.getRange(3, 1, 1, maxCols);
    rangeToCopy.copyTo(sh.getRange(2, 1, 1, maxCols),SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION,false);    
  }
}

У меня нет ссылки на e.range.columnStart. Я видел, как другие использовали, и просто сделал Logger.log(JSON.stringify(e));, чтобы увидеть это для себя. Я давно пользуюсь им, поэтому это одна из тех недокументированных возможностей.

Вот как это выглядит:

{ "AuthMode": {}, "Диапазон": { "columnStart": 6, "rowStart": 2, "rowEnd": 2, "columnEnd": 6}, "источник": {}, "пользователь ": {" прозвище ":" jimesteban», "электронная почта": "email@email.com"}, "значение": "6"}

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