Как пропустить скрытые строки при переборе электронных таблиц Google с помощью скрипта Google Apps - PullRequest
8 голосов
/ 22 июля 2011

У меня есть таблица Google со многими скрытыми строками, и я хочу пропустить их при переборе списка строк в таблице.

Это в основном проблема эффективности, так как я имею дело с тем, что более половины моих строк скрыты и не нуждаются в проверке.

Любая помощь будет оценена.

Ответы [ 4 ]

4 голосов
/ 25 августа 2011

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

3 голосов
/ 08 января 2015

Обходной путь. Создайте 2 столбца A и B. У A всегда должно быть значение, а у B - набор формул. Эти 2 столбца выглядят так:

A |           B
---------------------------
1 | =NOT(SUBTOTAL(103, A1))
1 | =NOT(SUBTOTAL(103, A2))
1 | =NOT(SUBTOTAL(103, A3))

SUBTOTAL возвращает промежуточный итог, используя указанную функцию агрегирования. Первый аргумент 103 определяет тип функции, используемой для агрегирования. Второй аргумент - это диапазон, к которому применяется функция.

  • 3 означает COUNTA и подсчитывает количество значений в диапазоне
  • + 100 означает игнорирование скрытых ячеек в диапазоне.

Результат SUBTOTAL с диапазоном 1 ячейка будет 0, когда ячейка скрыта, и 1, когда ячейка показана. NOT инвертирует его.

Теперь вы можете прочитать второй столбец вашего скрипта, чтобы узнать, не скрыта ли строка.

Вот транспонированный вопрос и ответ: https://stackoverflow.com/a/27846180/1385429

3 голосов
/ 05 октября 2013

Средство отслеживания проблем удерживает этот запрос с 3 августа 2010 г. со средним приоритетом и только статусом «Triaged».Более 3 лет и никаких признаков решения от команды GAS.

Мой обходной путь - использовать специальный ведущий символ, который будет указывать состояние видимости строки / столбца, это ведущий обратный удар (`) вячейки верхнего заголовка строки / столбца.Если в заголовках столбцов используются объединенные ячейки , то пустой верхней верхней строке следует выделить только для этой функции, пока инженеры Google не улучшат API.То же самое применимо, если в ячейках 1-й строки / столбца есть формул .Эти выделенные строки / столбцы сами могут быть скрыты.

После начала использования этой функции каждую команду отображения / скрытия столбца / строки следует выполнять из настраиваемого меню, в противном случае будут возникать ошибки.при программной итерации диапазона из-за отсутствующего / чрезмерного обратного удара.

Например, чтобы скрыть строки выбранных ячеек, вызывается следующая функция

function hideSelectedRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = SpreadsheetApp.getActiveRange();

  // hide rows and add a ` backtick to the header cell
  for (var row = range.getRow(); row <= range.getLastRow(); row++)
  {
    // add backtick only if it isn't there (that may happen when manually unhiding the rows)
    var cellHeader      = sheet.getRange(row, 1)
    var cellHeaderValue = cellHeader.getValue()    
    if ( !cellHeaderValue.match(/^`/) ) {
      cellHeader.setValue('`' + cellHeaderValue)
    }

    // hide rows of selected range
    sheet.hideRows( row );
  }
}

и меню

SpreadsheetApp.getActiveSpreadsheet()
.addMenu("Show/Hide", [
    { name : "Hide Selected Rows",    functionName : "hideSelectedRows"    },
    { name : "Hide Selected Columns", functionName : "hideSelectedColumns" },
    null,
    { name : "Hide Rows",             functionName : "hideRows"            },
    { name : "Hide Columns",          functionName : "hideColumns"         },
    null,
    { name : "Show Rows",             functionName : "showRows"            },
    { name : "Show Columns",          functionName : "showColumns"         },
    null,
    { name : "Show All Rows",         functionName : "unHideAllRows"       },
    { name : "Show All Columns",      functionName : "unHideAllColumns"    }
  ])

Как только инженеры Google найдут время для улучшения события onChange, можно будет автоматически добавлять эти метки.В настоящее время changeType ограничен EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, OTHER без каких-либо сведений о том, какая строка / столбец была вставлена ​​/ удалена.Похоже, что команда GAS скудна.Я хотел бы, чтобы они могли нанять больше программистов (кхм кхм)

0 голосов
/ 05 августа 2015

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

Синтаксис:

SUBTOTAL(function_code, range1, [range2, ...])

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

Например, 102 для COUNT при пропуске скрытых ячеек и 110 для VAR при этом.

Похожие: Сумма в таблицах Google отображает только строки в Webapps SE

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