Используйте map , чтобы создать новый массив, в котором видимые значения отображаются на «x», а скрытые значения остаются без изменений.
Используйте сопоставленный массив, чтобы напрямую setValues
на range
.
const getVisibleValuesMarkedWithStr_ = (
shtName,
rngString,
sheet = shtName ? SpreadsheetApp.getActive().getSheetByName(shtName) : null,
range = sheet ? sheet.getRange(rngString) : null,
stringToMark
) => {
return range
.getValues()
.map((row, rowIdx) =>
!sheet.isRowHiddenByFilter(rowIdx + 1) &&
!sheet.isRowHiddenByUser(rowIdx + 1)
? row.fill(stringToMark)
: row
);
};
function x() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const range = sheet.getRange(`C1:C${lastRow}`);
range.setValues(getVisibleValuesMarkedWithStr_(null, null, sheet, range, 'x'));
}