=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());
}
/**
* @param {{
* range: globalThis.SpreadsheetApp.Range
* }} e
*/
function addRow(e) {
const sheet = e.range.getSheet();
if (sheet.getName() !== 'Лист1') return;
if (e.range.getRow() === 2) {
if (sheet.getRange('2:2').getValues()[0].join('').length)
sheet.insertRowBefore(2);
}
}
addRow
к триггеру изменения Таблицыconst SETTINGS = {
cells: [{
sheet: 'Sheet2',
row: 5,
col: 3
}, {
sheet: 'Sheet2',
row: 5,
col: 4
}, {
sheet: 'Sheet2',
row: 5,
col: 5
}, {
sheet: 'Sheet2',
row: 5,
col: 9
}]
};
/**
* @param {{
* range: globalThis.SpreadsheetApp.Range
* }} e
*/
function myFunction(e) {
const sheet = e.range.getSheet();
if (sheet.getName() !== 'Sheet2') return;
const row = e.range.getRow();
const col = e.range.getColumn();
const trueed = SETTINGS.cells.findIndex(cell => cell.row === row && cell.col === col);
if (trueed !== -1 && (e.value === 'TRUE' || e.value === 'ИСТИНА')) {
SETTINGS.cells.forEach((cell, i) => sheet.getRange(cell.row, cell.col).setValue(trueed === i));
SpreadsheetApp.getActive().toast('OK');
}
}
myFunction
.file
как можно раньше, не забудьте сделатьfile = None
file
после Upload()
там должно быть что-то полезное.def load_google(filename, filecontent):
try:
drive = GoogleDrive(google)
file = drive.CreateFile({'title': f'{filename}'})
file.SetContentString(filecontent)
file.Upload()
link=file['alternateLink']
file=None
return link
except Exception as ex:
return ex
=QUERY(UNIQUE(A2:D125);"select Col1, Col2, Col3, count(Col1) group by Col1, Col2, Col3")
function myFunction() {
const arr = [1, 2, 2, 3, 34, 54, 3, 4, 45, 34, 53, 45, 4, 1, 23, 12, 3, 235, 2, 5, 1, 2, 6, 76, 54, 6, 84, 5, 23, 2, 34, 6, 735];
const done = [];
let attempts = 5;
while (attempts--) {
const a = [...arr];
const res = [];
const exclude = [];
while (a.length) {
const index = Math.floor(Math.random() * a.length);
const v = a[index];
if (exclude.indexOf(v) === -1) {
a.splice(index, 1);
res.push(v);
exclude.push(v);
if (exclude.length > 4)
exclude.shift();
} else if (!a.filter(v => exclude.indexOf(v) === -1).length) {
console.log('break', a, exclude);
break;
}
}
if (!a.length) {
done.push(...res);
break;
}
}
console.log(done);
}