/**
* @see https://gist.github.com/penguinboy/762197#gistcomment-3448642
*/
function flatten(object, path = null, separator = '.') {
return Object.keys(object).reduce((acc, key) => {
const value = object[key];
const newPath = Array.isArray(object)
? `${path ? path : ''}[${key}]`
: [path, key].filter(Boolean).join(separator);
const isObject = [
typeof value === 'object',
value !== null,
!(value instanceof Date),
!(value instanceof RegExp),
!(Array.isArray(value) && value.length === 0),
].every(Boolean);
return isObject
? { ...acc, ...flatten(value, newPath, separator) }
: { ...acc, [newPath]: value };
}, {});
}
/**
*
*/
function myFunction() {
const response = {
result: {
items: [
{
product_id: 253611,
offer_id: 'УТ-00007992',
stock: {
coming: 0,
present: 100,
reserved: 23,
},
},
{
product_id: 253616,
offer_id: 'УТ-00007043',
stock: {
coming: 0,
present: 23231,
reserved: 1,
},
},
],
total: 20,
},
};
const arr = response['result']['items'];
const data = [];
arr.forEach((el) => data.push(Object.values(flatten(el))));
SpreadsheetApp.getActive()
.getSheetByName('имя')
.getRange(1, 1, data.length, data[0].length)
.setValues(data);
}
1
, 06
, 23
, т.е. 10623
.VALUE(TEXT(A1;"1MMDD")
, где в A1
дата рождения сотрудника.=ARRAYFORMULA(IF(B2:B;IFERROR(
VLOOKUP(
VALUE(TEXT(B2:B;"1MMDD"));
SORT({'Знаки. Спаравочник'!J:J\'Знаки. Спаравочник'!A:L};1;1);
2;
1
)
);""))
B2:B
было значение, иначе выводим пустую строку, далее в составном диапазоне {'Знаки. Спаравочник'!J:J\'Знаки. Спаравочник'!A:L}
ищем индекс по колонке J:J
, т.е. "Западная астрология (вариант II)".=ARRAYFORMULA(IF(B2:B;IFERROR(
VLOOKUP(
VALUE(TEXT(B2:B;"1MMDD"));
SORT({'Знаки. Спаравочник'!J:J\'Знаки. Спаравочник'!A:L};1;1);
{2\3\4\5\6};
1
)
);""))
=QUERY('Остатки'!A:C,"select sum(C) where B='"&I18&"' label sum(C)''")
label sum(C)' '
(с пробелом), то заголовок будет пустым, и результат будет выведен на вторую строку под формулой.B
строки, то нужно писать B='"&I18&"'
, если же это числа то B="&I18&"
. SORTN
=SORTN('МТЗ жгуты'!A2:U;9^9;2;8;1)
SpreadsheetApp.flush()
. Этот метод останавливает все расчеты и пересчитывает все, что находится у вас в Таблице. Вероятно, из-за него у вас и проблемы.Всё выделяется сразу. Теперь видно с каким диапазоном работаю. Намного более понятно что попадает в значения диапазона.
id
.VLOOKUP
=ARRAYFORMULA(IFERROR({
'Лист1'!A1:J1;
VLOOKUP(UNIQUE('Лист1'!A2:A);SORT('Лист1'!A:J;4;0;1;1);COLUMN('Лист1'!A1:J1);)
};""))
SORTN
={
'Лист1'!A1:J1;
SORTN(SORT('Лист1'!A2:J;1;0;4;0);9^9;2;1;1)
}
SORTN
={
'Лист1'!A1:J1;
SORTN(SORT('Лист1'!A2:J;1;0;4;0);9^9;2;1;1;4;1)
}
display_ties_mode
отслеживает уникальные для каждого из комбинации первой и четвертой колонки. Т.е. выбирает для каждой уникальной комбинации id
и Updated at
первое вхождение в массив.SORTN
.=ARRAYFORMULA(IFERROR(VLOOKUP(
A2:A&C2:C;
{
UNIQUE(A2:A&C2:C)\
REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
IF(TRANSPOSE(UNIQUE(A2:A&C2:C))=A2:A&C2:C;B2:B & ", ";"");;ROWS(A2:A))
));"(\s*,)+$";"")
};
2;
);""))
ARRAYFORMULA
, это то, что ARRAYFORMULA
вернет тоже, что и ARRAYFORMULA(ARRAYFORMULA(ARRAYFORMULA))
. Не знаю, насколько это важно для вас сейчас, но это принципиальное знание.=SORT(FILTER({A2:A;B2:B;C2:C};{A2:A;B2:B;C2:C}<>"");1;1)
=FILTER(SORT(FLATTEN(A2:C);1;1);SORT(FLATTEN(A2:C);1;1)<>"")
=ARRAYFORMULA(IFERROR(UPPER(LEFT(F2:F;1)) & LOWER(RIGHT(F2:F;LEN(F2:F)-1));""))