Как пропустить скрытые строки при итерации через электронную таблицу Google w / Google Apps Script

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

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

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

4 ответов


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


Проблема tracker держит этот запрос С 3 августа, 2010 С приоритетом "средний" и "срочный" статус. Более 3 лет и никаких признаков решения от газовой команды.

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

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

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

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, можно будет автоматически поместить эти палочки. В настоящее время тип изменений ограничен EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, OTHER без каких-либо сведений о том, какая строка/столбец была вставлена/удалена. Похоже, команда, стоящая за газом, скудна. Я желаю, чтобы они могли нанять больше программистов (хм хм)


обходной путь. Создайте 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


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

синтаксис:

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

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

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

по теме: отображается только сумма электронных таблиц Google строки в Webapps SE