Как использовать в Google Sheets setValue только для диапазона отфильтрованных строк (getRange для не скрытых ячеек)? - PullRequest
1 голос
/ 24 марта 2020

Я хочу знать, как использовать setValue, если есть отфильтрованные строки, чтобы только показанные строки (C1 + одна строка до последней строки C) получали значение.

x(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  sheet.getRange(C2, lastRow).setValue('x');
}

Обновление

Работает, но очень медленно. Я проверил следующий код, и он работает быстро. Это должно начаться во второй показанной строке. Следующее решение работает как с фильтром, так и без него. Что еще не запущено, так это второй ряд (C2). Скопированное значение всегда вставляется туда. Кроме того, я хотел бы обойтись без вспомогательной ячейки для копирования, если это возможно. Можно ли скопировать setValue для функции copypaste (getValue)?

function x() {
  var spreadsheet = SpreadsheetApp.getActive();
  var lastRow = spreadsheet.getLastRow();
  spreadsheet.getRange('C2:'+'C'+lastRow).activate();
  spreadsheet.getRange('C1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};

Цель состоит в том, чтобы поместить x в видимые (не скрытые или невидимые отфильтрованные) ячейки столбца C , Для этого мне просто нужно знать, как указать вторую видимую ячейку как значение getRange (например, со смещением), потому что работает оставшаяся часть (конечная ячейка: lastRow) (правильный выбор и ввод, только C2, каждый раз, если я используя этот скрипт, есть в C2 ax):

spreadsheet.getRange('C2:'+'C'+lastRow).activate();

Первая строка исправлена. Как использовать первый не видимый ряд (второй ряд) для getRange? Если последняя строка скрыта и используется сценарий, то здесь x не задан, возможно, из-за 'C' + lastRow. Это работает. Это касается только C2.

Вот решение

var s = SpreadsheetApp.getActive().getActiveSheet();

function x() {
  var lastRow = s.getLastRow();
  for(var row = 2; s.isRowHiddenByFilter(row); ++row);
  var range = s.getRange('C'+row+':C'+lastRow);
  s.getRange('F1').copyTo(range, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}

1 Ответ

2 голосов
/ 24 марта 2020
  • Вы хотите поместить значение, используя setValue, в отображаемые строки фильтруемого столбца (столбец "C").
  • Фильтр является базовым c фильтром.

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

Точки модификации:

  • В этом случае вы можете извлечь номера строк показанных и скрытых строк с помощью фильтра, используя isRowHiddenByFilter.
    • Когда isRowHiddenByFilter равно true, строка скрывается.
    • Когда isRowHiddenByFilter равно false, строка отображается.
  • Список диапазонов создается из полученных номеров строк и используется для setValue.

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

var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var ranges = [];
for (var i = 0; i < lastRow; i++) {
  if (!sheet.isRowHiddenByFilter(i + 1)) {
    ranges.push("C" + (i + 1));
  }
}
sheet.getRangeList(ranges).setValue('x');
  • При запуске скрипта значение x помещается в отображаемые строки столбца "C".
  • Если if (!sheet.isRowHiddenByFilter(i + 1)) { изменяется на if (sheet.isRowHiddenByFilter(i + 1)) {, значение x помещается в скрытые строки .

Ссылки:

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

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