function Q(table, query, i) {
return [table, query][i];
}
=QUERY(
Q({1\2\3\4;5\6\7\8};"select Col1, Col2";0);
Q({1\2\3\4;5\6\7\8};"select Col1, Col2";1);
0
)
function run() {
const book = SpreadsheetApp.getActive();
const matcher = new RegExp('метка (\\d+$)', 'i');
const sheetChecker = (sheet) => {
const [_, num] = sheet.getSheetName().match(matcher) || [];
if (Number(num) >= 2 || Number(num) <= 6)
book.deleteSheet(sheet);
}
deleteSheets_(book, sheetChecker);
}
/**
* @param {globalThis.SpreadsheetApp.Spreadsheet} book
* @param {SheetChecker} sheetChecker
* @returns {void}
*/
function deleteSheets_(book, sheetChecker) {
book.getSheets().forEach(sheet => {
if (sheetChecker(sheet)) {
book.deleteSheet(sheet);
}
});
}
/**
* Проверяет, подходит ли лист для обработки
* @callback SheetChecker
* @param {globalThis.SpreadsheetApp.Sheet} sheet
* @returns {boolean}
*/
sheetChecker
, можно удалять любые листы, которые будут валидны проверке в этой функции. const isFormula_ = value => String(value).charAt(0) === '=';
const editValue_ = value => isFormula_(value) ? String(value).substring(1) : value;
function onEdit(e) {
const sheet = e.range.getSheet();
if (
sheet.getName() === 'Пример' &&
e.range.getRow() > 1 &&
e.range.getColumn() === 8 &&
isFormula_(e.value)) {
e.range.setValue(editValue_(e.value));
}
}
=MATCH("Мышка";$A1:$F1;)
function onEdit(e) {
const sheet = e.range.getSheet();
if (sheet.getName() === 'Пример' && e.range.getRow() > 1 && e.range.getColumn() === 2) {
sheet.getRange(e.range.getRow(), 1).setValue(new Date());
}
}
const excludeSheetNames = (sheetName) => !['О Таблице', 'Исключить этот листо тоже', 'Лист 1'].includes(sheetName);
function onEdit(e) {
const sheet = e.range.getSheet();
if (excludeSheetNames(sheet.getName()) && e.range.getRow() > 1 && e.range.getColumn() === 2) {
sheet.getRange(e.range.getRow(), 1).setValue(new Date());
}
}
=MAP(C2:C17;LAMBDA(X;JOIN("|";N(X=TODAY());N(WEEKNUM(TODAY())=WEEKNUM(X));N(EOMONTH(TODAY();0)=EOMONTH(X;0));1)))
=ARRAYFORMULA(QUERY(
{B2:B17\SPLIT(MAP(C2:C17;LAMBDA(X;JOIN("|";N(X=TODAY());N(WEEKNUM(TODAY())=WEEKNUM(X));N(EOMONTH(TODAY();0)=EOMONTH(X;0));1)));"|")};
"select Col1, sum(Col2), sum(Col3), sum(Col4), sum(Col5)
group by Col1
label Col1'Исполнитель',sum(Col2)'Сегодня',sum(Col3)'За неделю',sum(Col4)'За месяц',sum(Col5)'Всего'";
0
))
2022-10-04 Обновлено.
Сравнение дат через DATEDIFF требует очередь аргументов, поэтому лучше сравнивать номера недель. Но тогда отчет будет выводить не за 7 дней, а именно за неделю.
function run() {
const book = SpreadsheetApp.getActive();
const data = book.getSheetByName('dataBase').getRange('A:A').getValues();
const main = book.getSheetByName('main');
['E9:E13', 'J9:J13', 'E23:E27', 'J23:J27'].forEach(addr => {
console.log(addr);
const range = main.getRange(addr);
range.setValues(data.splice(0, range.getNumRows()));
});
}
IMPORTXML
вы можете получить только название, артикул и количество звезд.A:A
и отправляет пользователю в чат CHAT_ID
function run() {
const data = SpreadsheetApp.openById('1cZQsbkCFgA3MOqiaAPiMyp2Jf_xHXsRc_TeuzVkMFQI')
.getSheetByName('Лист2').getDataRange().getValues();
const text = data[Math.floor(Math.random() * data.length)][0];
const res = sendMessage_({ chat_id: CHAT_ID, text });
console.log(res.getContentText());
}