Как можно исключить верхнюю строку или ячейку листа из getActiveRange (), если она существует? Как можно интегрировать shift ()? Выбор делается только внутри столбца для определения области, которая будет использоваться в столбце 3.
function x() {
var s = SpreadsheetApp.getActive().getActiveSheet();
var lastColumn = s.getActiveRange().getLastColumn();
var activeRange = s.getActiveRange().offset(0, -lastColumn+3); // column 3
if (activeRange.getRow() == 1) {
s.getRange('F1').copyTo(activeRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
else {
s.getRange('F1').copyTo(activeRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
}
Если ячейки (смежные) активированы в столбце и только строка 1 (строка заголовка), 5, 8 и 9 отображаются, например, из-за фильтра. Затем F1 (x) нужно вставить в строки 5, 8 и 9 с помощью copyTo (). Мне пока не ясно, как интегрировать предложенные решения. Вот несколько примеров:
1:
function getRangeMinusHeaders(range) {
var height = range.getHeight();
if (height == 1) {
return null;
}
var width = range.getWidth();
var sheet = range.getSheet();
return sheet.getRange(1, 1, height-1, width);
}
function x() {
var s = SpreadsheetApp.getActive().getActiveSheet();
var lastColumn = s.getActiveRange().getLastColumn();
var range = s.getActiveRange().offset(0, -lastColumn+3); // column 3
s.getRange('F1').copyTo(getRangeMinusHeaders(range), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
2:
function x() {
var s = SpreadsheetApp.getActive().getActiveSheet();
var lastColumn = s.getActiveRange().getLastColumn();
const activeRange = s.getActiveRange().offset(0, -lastColumn+3); // column 3
if (activeRange.getRow() == 1) {
activeRange.getValues();
activeRange.shift();
activeRange.forEach(function(row, index) {
s.getRange('F1').copyTo(row, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
})
}
else {
s.getRange('F1').copyTo(activeRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
}