function onEdit(e) {
const range = e.range;
const sheet = range.getSheet();
const sheetName = sheet.getName();
const row = range.getRow();
const column = range.getColumn();
if (sheetName === 'Лист4' && column === 21 && row > 1) {
const range2 = range.offset(0, 1);
const value2 = range2.getValue();
range2.setValue(+value2 + +e.value);
range.setValue(null);
}
}
= {
FILTER('Вспомогательный лист'!A:A;'Вспомогательный лист'!A:A<>"");
SUM('Вспомогательный лист'!Z:Z;)
}
IMPORTRANGE
. $> google-chrome --app=https://docs.google.com/spreadsheets --profile-directory=default
function run2() {
const book = SpreadsheetApp.getActiveSpreadsheet();
const sheet = book.getSheetByName('Пример 2');
sheet.sort(5);
const values = sheet.getDataRange().getValues();
const buffer = {
value: values[values.length - 1][1]
};
values.forEach((_, i, arr) => {
const j = arr.length - 1 - i;
const value = arr[j][1];
if (value !== buffer.value) {
sheet.insertRowAfter(j + 1);
buffer.value = value;
}
});
}
function copyRange() {
const book = SpreadsheetApp.getActiveSpreadsheet();
const sheet = book.getSheetByName('Пример');
const fromRange = sheet.getRange('A2:C4');
const fromValues = fromRange.getValues();
const fromColors = fromRange.getBackgrounds();
const values = fromValues.filter(([_, __, value]) => value !== 'Закрыт');
const colors = fromColors.filter((_, i) => fromValues[i][2] !== 'Закрыт');
const toRange = sheet.getRange(1, 5, values.length, values[0].length);
sheet.getRange(1, 5, sheet.getLastRow(), 3).clear();
toRange.setValues(values).setBackgrounds(colors);
}
=ARRAYFORMULA({
"Пробег выезда";
IFERROR(VLOOKUP(
B4:B18;
{'1'!B4:B18\'1'!F4:F18};
2;
0
))
})
=INDEX(TRANSPOSE(SORT(
{IFNA(--REGEXEXTRACT(TRANSPOSE(D5:H5);"^\d+");TRANSPOSE(D5:H5))\TRANSPOSE(D5:H5)};
1;1));2)
={"Заголовок";ARRAYFORMULA()}
ARRAYFORMULA
постараться рассчитать свои задачи function run() {
const book = SpreadsheetApp.getActiveSpreadsheet();
const sheet = book.getSheetByName('Пример 1');
sheet.sort(5);
const values = sheet.getDataRange().getValues();
const buffer = {
value: values[values.length - 1][4]
};
values.forEach((_, i, arr) => {
const j = arr.length - 1 - i;
const value = arr[j][4];
if (value !== buffer.value) {
sheet.insertRowAfter(j + 1);
buffer.value = value;
}
});
}
function run() {
const from = SpreadsheetApp.openById(
'1DrMcZylPeacuZm7zTxRZmd3hcx1l0pKS2RjeqSphUeE'
);
const fromSheet = from.getSheetByName('Данные');
const fromData = fromSheet.getDataRange().getValues().slice(1);
const to = SpreadsheetApp.openById(
'1LFgJE1cCRNM4PoVAWmZRPCm5BbdsAN5YkhgxC7okJc8'
);
const toSheet = to.getSheetByName('Сводные');
const toDataIndex = toSheet
.getDataRange()
.getValues()
.slice(1)
.filter((row) => row[5] !== '')
.map((row) => row[5]);
const data = fromData.filter((row) => toDataIndex.indexOf(row[5]) === -1);
if (data.length)
toSheet
.getRange(toSheet.getLastRow() + 1, 1, data.length, data[0].length)
.setValues(data);
}
function triggerSort(e) {
const book = SpreadsheetApp.getActiveSpreadsheet();
const sheet = book.getSheetByName('Sheet1');
sheet.sort(2, false).sort(1);
}
Диалоги пользовательского интерфейса не могут быть вызваны функциями, запускаемыми триггером, они должны запускаться действием пользователя, то есть щелчком по пункту меню или какой-либо кнопкой, которая вызывает функцию, отображающую пользовательский интерфейс.