Как пропустить скрытые строки при переборе электронных таблиц Google с помощью скрипта Google Apps
У меня есть Google Spreadsheet со множеством скрытых строк, и я хочу пропустить их при переборе списка строк в электронной таблице.
В основном это проблема эффективности, так как я имею дело с тем, что более половины моих строк скрыты и не нуждаются в проверке.
Любая помощь будет оценена.
4 ответа
Новый API с 2018 года, который полезен для этой проблемы: isRowHiddenByUser. Смотрите также isRowFilteredByUser
,
Обходной путь. Создайте 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
переворачивает это
Теперь вы можете прочитать второй столбец с вашим скриптом, чтобы узнать, скрыта ли строка.
Вот транспонированный вопрос и ответ: /questions/37184092/kak-opredelit-yavlyaetsya-li-stolbets-skryityim-v-elektronnoj-tablitse-google-s-pomoschyu-stsenariev/37184102#37184102
Средство отслеживания ошибок поддерживает этот запрос с 3 августа 2010 года со средним приоритетом и только статусом "Triaged". Более 3 лет и никаких признаков решения от команды ГАЗ.
Мой обходной путь состоял в том, чтобы использовать специальный ведущий символ, который бы указывал состояние видимости строки / столбца, это ведущий символ обратной черты (`) в ячейках верхней строки / столбца заголовка. В случае, если объединенные ячейки используются в заголовках столбцов, для этой функции должна быть выделена пустая верхняя строка, пока инженеры 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, можно будет автоматически добавлять эти метки. В настоящее время changeType ограничен EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, OTHER без каких-либо сведений о том, какая строка / столбец была вставлена / удалена. Похоже, что команда GAS скудна. Я хотел бы, чтобы они могли нанять больше программистов (кхм кхм)
Что касается обходного пути, это возможно с помощью SUBTOTAL
функция, которая может возвращать промежуточный итог для вертикального диапазона ячеек.
Синтаксис:
SUBTOTAL(function_code, range1, [range2, ...])
где скрытые значения могут быть пропущены для любого из этих кодов путем добавления 10 (к однозначным кодам).
Например, 102 для COUNT
пропуская скрытые клетки, и 110
за VAR
при этом.
Связанный: Google Spreadsheets суммирует только показанные строки в Webapps SE