function onEdit(event) {
//Возникает при изменении ячейки
const ss = event.source.getActiveSheet();//Текущий лист
const address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
if (address!=="A1") return;//Указываем адрес "активной" ячейки
if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return; //Указываем на каких листах должен работать скрипт
const beforePosition = event.range.getRow();
ss.insertRowBefore(beforePosition);
};
=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp"; "//ValCurs/Valute[CharCode=""USD""]/Value")
= GoogleFinance("Currency:USDRUB")
=importxml("https://www.profinance.ru/currency_usd.asp";"(//table[1]//b/font[@color='Red'])[1]")
function setData(){
/* Боев Григорий (с) 2020 (telegram @ProgrammerForever) */
const FIRST_ROW = 3; // Первая строка
const FIRST_OUT_COL = 10; // Первый столбец, Сентябрь
const FIRST_IN_COL = 7; // Первый столбец с исходными данными
const DATA_WIDTH = 3; // Столбцов с данными
const SHEET_NAME = "Лист1"; // Имя листа
let now = new Date();
let month = now.getMonth();//Либо получаете номер месяца (от 0 до 11) анализируя вашу ячеййку
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
let inRange = sheet.getRange(FIRST_ROW, FIRST_IN_COL, sheet.getMaxRows(), DATA_WIDTH);
let inData = inRange.getValues();
let outRange = sheet.getRange(FIRST_ROW, FIRST_OUT_COL + month*DATA_WIDTH, inData.length, DATA_WIDTH);
outRange.setValues(inData);
};
//Telegram - @ProgrammerForever
function onEdit(event) {
//Перенос в архив
//Возникает при изменении ячейки
var ss = event.source.getActiveSheet();//Текущий лист
var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
var row = event.range.getRow(); //Номер строки
var col = event.range.getColumn(); //Номер столбца
var newValue = event.value; //Новое значение
var oldValue = event.oldValue; //Старое значение
if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return; //Указываем на каких листах должен работать скрипт
//Можно при желании ещё фильтровать по строке/столбцу (row/col), или по старому/новому значению (oldValue/newValue)
const archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Архив");
archive.getRange(archive.getLastRow()+1, 1).setValue(
formatDateTime(new Date())+" " + "[" + ss.getName() + "!" + address + "] '" + (oldValue==undefined?"":oldValue) + "' >> '" + (newValue==undefined?"":newValue) +"'"
);
};
function formatDate(date) {
try{
var dd = date.getDate();
if (dd < 10) dd = '0' + dd;
var mm = date.getMonth() + 1;
if (mm < 10) mm = '0' + mm;
var yy = date.getFullYear() % 100;
if (yy < 10) yy = '0' + yy;
return dd + '.' + mm + '.' + yy;
}catch(err){
return "";
};
}
const arrowFuncSquare = (param) => param * param
// Не нужен return, стрелочная однострочная функция без фигурных скобок
const arrowFuncSquare2 = (param) => {
if (param) return param * 2
else return param
} // Нужен return, потому что фигурные скобки
const addTime = param => {
param.createdAt = moment()
param.updatedAt = moment()
} // Не нужен return, потому что функция не возвращает значения
const addTime = param => {
if (param.timeless) return
param.createdAt = moment()
param.updatedAt = moment()
} // Нужен return чтобы при определенном условии прерывать выполнение кода функции