function test_replaceInRange(){
let rangeAddress = "A:C";
let find = "1";
let replaceWith = "22";
replaceInRange(rangeAddress, find, replaceWith);
};
/**
* Заменяет find на replaceWith в диапазоне rangeAddress
* Telegram - @ProgrammerForever
*
* @param {string} rangeAddress Адрес диапазона
* @param {string} find Что менять
* @param {string} replaceWith На что менять
* @return Не возвращает значений
*/
function replaceInRange(rangeAddress, find, replaceWith){
find = find===undefined?"":(find+"");
replaceWith = replaceWith===undefined?"":(replaceWith+"");
let as = SpreadsheetApp.getActiveSpreadsheet();
let range = as.getRange(rangeAddress);
let values = range.getValues();
let replacedValues = values.map(row=>row.map(el=>(el+"").split(find).join(replaceWith)));
range.setValues(replacedValues);
range.activate();
as.toast("Done!");
};
/**
* Декодирует строку вида %uXXXX%uXXXX и/или %XX в текст
* Боев Григорий (с) 2020 (telegram @ProgrammerForever)
*
* @param {string} encoded Кодированный текст
* @return Декодированный текст
* @customfunction
*/
function uEncode(encoded) {
return encoded.split('%')
.filter(el=>el!='')
.map(el=>el[0]==='u'?el.substring(1):el)
.map(el=>parseInt(el,16))
.map(code=>String.fromCodePoint(code))
.join('');
}
let now = new Date();
let tomorrow = new Date(+now+24*60*60*1000);
let maxRows = sheet.getMaxRows();
let maxColumns = sheet.getMaxColumns();
let data = sheet.getRange(1, 1, maxRows, maxColumns).getValues();
sheet\.getRange\(\s*(.*?)\s*,\s*(.*?)\s*\)\.getValue\(\)
inData[$1][$2]
function onEdit(event) {
//* Боев Григорий (с) 2020 (telegram @ProgrammerForever)
const ss = event.source.getActiveSheet(); // Текущий лист
const row = event.range.getRow(); // Номер строки
const col = event.range.getColumn(); // Номер столбца
const rowsCount = ss.getMaxRows(); // Кол-во строк
const inRange = ss.getRange(1,col,rowsCount,1);
var inData = inRange.getValues(); // Получение значений
inRange.clearContent(); // Удаление старых
inData = inData.filter(row=>row[0].getTime); // Оставить только даты
inData.sort((a,b)=>a[0].getTime()-b[0].getTime()); // Сортировка
ss.getRange(1,col,inData.length,1).setValues(inData); //Вывод
};
function rePaint() {
SpreadsheetApp.getActive().getActiveRangeList().setBackground('#ff9900');
};
var sheet = SpreadsheetApp.getActiveSpreadsheet();
const sheetName = sheet.getName(); // Тут получаем название вкладки
//...
if ((range.getColumn() == 1 )&&(sheetName==="Лист1")){//Проверяем
if(Session.getActiveUser()!=('log1@stark-automotive.com' || 'alisa.asatryan@stark-automotive.com')){
MailApp.sendEmail('log1@stark-automotive.com', 'КМ внес поставку', 'в ячейку '+cell+' менеджером '+Session.getActiveUser());
}
}
var sheet = SpreadsheetApp.getActiveSpreadsheet();
if (["Лист1","Лист2"].indexOf(sheet.getName())==-1) return;//Список листов на которых скрипт работает
<td> element </td>
HtmlService.createHtmlOutputFromFile
GoogleScript Sidebar
=ARRAYFORMULA(ЕСЛИ(A1:A="";"";"Выполнено"))
/**
* Возникает при изменении ячейки
* @param {e} event event-объект https://developers.google.com/apps-script/guides/triggers/events?hl=ru
* [ ProgrammerForever (c) 2020 ]
* @return Не возвращает значений
*/
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; //Старое значение
var userEmail = event.user.getEmail();//Пользователь(работает только при вручную назначенном триггере)
//Делаем что-то
if((col===1)&&(newValue!="")){
ss.getRange(row,2).setValue("Выполнено");
};
};
/**
* Выполняет действия на всех листах, кроме тех, которые указаны в blackList
* [ ProgrammerForever (c) 2020 ]
* @return Не возвращает значений
*/
function listChanger(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var blackList = ["Настройки", "Data"];// Чёрный список. На этих листах действий не будет
var sheets = ss
.getSheets()
.map(sheet=>sheet.getName())
.filter(sheetName=>blackList.indexOf(sheetName)===-1);
for(var sheetIndex in sheets){
var currentSheet = ss.getSheetByName(sheets[sheetIndex]);
//Что-то делаем с currentSheet
};
};
const time = new Date();
const hours = time.getHours();
const minutes = time.getMinutes();
if ((hours!=21)&&(minutes!=0)){return;};
Могу ли я написать такой триггер, чтобы он запускал программу по проверке накладных даже когда моя таблица у меня не загружена?