Как пропустить скрытые строки при итерации через электронную таблицу 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