Сценарий Google Sheets: удаление диапазона на основе флажка - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь перевести макрос в функцию OnEdit.

Мой диапазон равен A2: R7. У него нет видимого фильтра. В колонке A есть флажки (A3: A7).

Если флажок установлен, я хочу, чтобы он очистил соответствующее содержимое активной строки (A: O) и (Q: R). Примечание , Col P содержит формулу, которую я буду поддерживать sh.

Когда содержимое будет очищено, я хочу снять флажок и отсортировать оставшееся содержимое в диапазоне (A2: A7).

Он - макрос, назначенный строке 5.

function macro1() {
  var spreadsheet = SpreadsheetApp.getActive();

  // Set checkbox to FALSE
  spreadsheet.getRange('A5').activate();
  spreadsheet.getCurrentCell().setValue('FALSE');

  // Clear contents Col B to Col O and Col Q to Col R
  spreadsheet.getRange('B5:O5').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q5:R5').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});

  // Create filter, sort, remove filter
  spreadsheet.getRange('A2:R7').createFilter();
  spreadsheet.getActiveSheet().getFilter().sort(2, true);
  spreadsheet.getActiveSheet().getFilter().remove();}

Мои попытки решить его были относительно тщетными, так как я очень плохо знаком с использованием сценариев. Основной причиной разочарования является присвоение ему флажка.

1 Ответ

3 голосов
/ 29 февраля 2020
  • В вашей ситуации
    • «A3: A7» имеет флажки.
    • Когда флажок установлен, вы хотите очистить содержимое ячеек «B: O» и "Q: R".
    • Вы хотите снять галочку после запуска скрипта.
    • Вы хотите сохранить формулы столбца "P".
  • Вы хотите добиться этого с помощью триггера событий OnEdit со скриптом Google Apps.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Пример сценария:

Пожалуйста, скопируйте и вставьте следующий сценарий и сохраните сценарий.

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
    const row = range.rowStart;
    sheet.getRangeList([`B${row}:O${row}`, `Q${row}:R${row}`]).clearContent();
    range.uncheck();
  }
}
  • В этом сценарии, когда в электронной таблице установлен флажок «A3: A7», функция onEdit() запускается триггером события OnEdit в качестве простого триггера. В этом случае используется оператор if if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE").
  • Когда флажок установлен, ячейки «B: O» и «Q: R» очищаются с помощью clearContent().
  • Затем флажок снимается с uncheck().

Примечание:

  • Когда вы непосредственно запускаете функцию onEdit в редакторе сценариев возникает ошибка типа TypeError: Cannot read property 'range' of undefined. Этот скрипт автоматически запускается простым триггером. Поэтому, пожалуйста, проверьте флажок. Пожалуйста, будьте осторожны.
  • Из вашего скрипта я использовал активный лист. Но если вы хотите запустить сценарий для указанного листа c, скажите, пожалуйста.
  • В этом сценарии, пожалуйста, используйте с включением V8.

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно, я приношу свои извинения.

Добавлено:

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

С:

if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {

Кому:

if (sheet.getSheetName() == "Sheet1" && range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
  • Когда отредактированный лист представляет собой «Лист1», сценарий запускается , В этом случае на листе «Лист1» обязательно должны быть установлены флажки. Пожалуйста, будьте осторожны с этим.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...