QUERY
=QUERY(A1:B;"select A, count(B) where B='Аноним' group by A label count(B)'Анонимы'";1)
=INDEX(
QUERY(
{
'Заказы'!H3:I;
{'Заказы'!M3:M\-1*'Заказы'!N3:N}
};
"select Col1, sum(Col2)
where Col1<>'' and Col1<>'1899-12'
group by Col1
label Col1'Дата',sum(Col2)'Прибыль'"
)
)
-1*'Заказы'!N3:N
.range
.function runTamotsuSample() {
Tamotsu.initialize();
const agent = Tamotsu.Table.define({
sheetName: 'Sheet1',
idColumn: 'id'
});
agent.create({
date: new Date(),
number: 100,
string: 'Hi there'
})
}
=FILTER(A:A;ISNA(MATCH(A:A;B:B;0)))
=ARRAYFORMULA(
REGEXREPLACE(
TRANSPOSE(QUERY(TRANSPOSE(D1:G&"|"),,COLUMNS(D1:G))),
"(\|\s*)+",
", " )
)
={"В строку";ARRAYFORMULA(REGEXREPLACE(
REGEXREPLACE(
TRIM(TRANSPOSE(QUERY(TRANSPOSE(D2:G&"|");;COLUMNS(D2:G))));
"(\|\s*)+";
", " );
"(^,\s*)|(,\s*$)";
""
))}
const goToWrapper_ = (address) => {
const range = getRangeByRefString_(SpreadsheetApp.getActiveSheet(), address);
range.getSheet().getRange('A1').activate();
range.activate();
}
function getRangeByRefString_(sheet, refString) {
return refString.indexOf('!') === -1 ?
sheet.getRange(refString) :
sheet.getParent().getRange(refString);
}
function goTo555() {
goToWrapper_('A555');
}
function goToSheet5A555() {
goToWrapper_('Sheet5!A555');
}
B1
формулу=INDEX('Ответы на форму!A:A')
B2:B
удалите!VLOOKUP
A3:A
- первая таблица,C3:F
- вторая таблица,IMPORTRANGE
для переноса данных в общее место)=INDEX(IFERROR(VLOOKUP(
A3:A;
C3:F;
{1\2\3\4};
)))
=FILTER({C5:C20\A5:B20};C5:C20=1;B5:B20<>"")
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
const allowRanges = [
{ sheetName: 'Заглавная буква', cells: ['B2', 'B3', 'B4'] },
{ sheetName: 'Стартовая страница', cells: ['B2', 'C2', 'D2'] },
]; // Список
const sheetNames = allowRanges.map(r => r.sheetName);
if (e && e.range) {
const sheet = e.range.getSheet();
if (
sheetNames.indexOf(sheet.getName()) > -1 &&
allowRanges.find(r => r.sheetName === sheet.getName()).cells.indexOf(e.range.getA1Notation()) > -1
) {
const value = '' + e.range.getValue();
e.range.setValue(value.slice(0, 1).toLocaleUpperCase() + value.slice(1).toLocaleLowerCase());
}
}
}
Не работает для группы ячеек
=REGEXEXTRACT("" & B8;"(\d\d)(\d\d)(\d\d)(\d\d)")
=IF(--C8>22;REGEXEXTRACT(C8;"(\d)(\d)"); C8)
=INDEX(SORTN(TRANSPOSE({
IF({B19:L19\B28:L28}="";"";--{B19:L19\B28:L28});
TRIM(QUERY(
IF("" & TRANSPOSE({B19:L19\B28:L28})="" & {B19:L19\B28:L28};IF({B19:L19\B28:L28}="";"";--{B19:L19\B28:L28}););
;
9^9))
});9^9;2;1;1);;2)
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
const sheetName = 'Sheet6'; // Имя листа, который можно использовать
if (e && e.range) {
const sheet = e.range.getSheet();
if (sheet.getName() === sheetName)
sheet.getRange('A1').setValue(Math.random());
}
}
VLOOKUP
=INDEX(IFERROR(VLOOKUP(A:A;'Данные'!A:B;2;)))
const getUrl = (id, range, key) =>
`https://sheets.googleapis.com/v4/spreadsheets/${id}/values/${range}?key=${key}`;
const arrToCollect = (array) =>
array
.slice(1)
.map(
(_, ri) =>
array[0].reduce((ah, h, ci) => ((ah[h] = array[ri + 1][ci]), ah), {}),
[]
);
(async () => {
const id = '1xTXNtfabGIiFR9PdOQonmnlSPbhGcj_2Geo1v0cq4Gw';
const range = 'Sheet';
// Limited to the use of the contributor.pw/* domain
const key = 'AIzaSyCt4F7Z8cVDqivNcO3slXewThZurJ4gJNY';
let res = {};
try {
res = await fetch(getUrl(id, range, key));
const data = JSON.parse(await res.text());
console.log(data.values);
console.log(arrToCollect(data.values));
} catch (err) {
console.error(err);
}
})();
getUrl
- функция для формирования адреса запроса к API.arrToCollect
- функция преобразования двухмерного массива в массив объектов. Я ее просто копирую, поэтому она такая плотная. Подробно https://github.com/contributorpw/google-apps-scrip... К сожалению, из-за блокировки я не могу прислать вам прямую ссылку на сайт. См. (если не лень) https://apps-script-snippets.contributor(dot)pw/snippets/common_js/2darray_to_collection/