Google Script - очистить диапазон, кроме одного определенного значения ячейки - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть простая функция для очистки содержимого всех ячеек в двух определенных диапазонах на одном google-листе.

function clearRange() {
      var activeSheet = SpreadsheetApp.openById("idofmytable").getSheetByName("name");
      activeSheet.getRange('B9:H35').clearContent();
      activeSheet.getRange('K9:Q35').clearContent();
    }

Я хотел бы обновить функцию и позволить сценарию очистить все ячейки, кроме ячейка имеет значение «10». если ячейка имеет значение 10, ее не следует очищать.

как мне это сделать?

1 Ответ

1 голос
/ 23 февраля 2020
  • Вы хотите очистить содержимое всех ячеек, которые не имеют значения 10 в листе.
  • Вы хотите добиться этого с помощью Google Apps Script.

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

В этом ответе я использовал следующий поток.

  1. Извлечение всех значений из диапазона данных в таблице.
  2. Получите диапазон ячеек, значение которого не равно 10 в качестве a1Notation.
  3. Очистите содержимое, используя getRangeList.

Модифицированный скрипт:

function clearRange() {
  var activeSheet = SpreadsheetApp.openById("idofmytable").getSheetByName("name");

  var columnToLetter = function(column) { // This is from https://stackoverflow.com/a/21231012/7108653
    var temp, letter = '';
    while (column > 0) {
      temp = (column - 1) % 26;
      letter = String.fromCharCode(temp + 65) + letter;
      column = (column - temp - 1) / 26;
    }
    return letter;
  };

  // Retrieve all values.
  var values = activeSheet.getDataRange().getValues();

  // Retrieve the cell range as a1Notation, when the cell value is not 10.
  var ranges = values.reduce(function(ar, row, i) {
    row.forEach(function(col, j) {if (col != 10) ar.push(columnToLetter(j + 1) + (i + 1))});
    return ar;
  }, []);

  // Clear the content of the retrieved ranges.
  activeSheet.getRangeList(ranges).clearContent();
}

Ссылки:

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

Добавлено:

  • Вы хотите удалить содержимое из ячеек в диапазонах "B9 : H35 & K9: Q35 ", которые не являются значением 10 в листе.

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

function clearRange() {
  var activeSheet = SpreadsheetApp.openById("idofmytable").getSheetByName("name");

  var columnToLetter = function(column) { // This is from https://stackoverflow.com/a/21231012/7108653
    var temp, letter = '';
    while (column > 0) {
      temp = (column - 1) % 26;
      letter = String.fromCharCode(temp + 65) + letter;
      column = (column - temp - 1) / 26;
    }
    return letter;
  };

  // Retrieve values from B9:H35 and K9:Q35.
  var value1 = activeSheet.getRange('B9:H35').getValues();
  var value2 = activeSheet.getRange('K9:Q35').getValues();

  // Retrieve the cell range as a1Notation, when the cell value is not 10.
  var colOffset1 = 2;
  var colOffset2 = 11;
  var rowOffset = 9;
  var ranges1 = value1.reduce(function(ar, row, i) {
    row.forEach(function(col, j) {
    if (col != 10) ar.push(columnToLetter(j + colOffset1) + (i + rowOffset))});
    return ar;
  }, []);
  var ranges2 = value2.reduce(function(ar, row, i) {
    row.forEach(function(col, j) {
    if (col != 10) ar.push(columnToLetter(j + colOffset2) + (i + rowOffset))});
    return ar;
  }, []);

  // Clear the content of the retrieved ranges.
  activeSheet.getRangeList(ranges1).clearContent();
  activeSheet.getRangeList(ranges2).clearContent();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...