Транспонировать Google таблицу и разложить по заказам
Имею таблицу, сформированную из Google Forms:
Хочется сделать из нее что-то типа такого:
Открыл для себя следующую формулу:
={ARRAYFORMULA(QUERY(TRANSPOSE('Заказы'!1:2); "where Col1 is not null"; 1))}
Но, она игнорирует все кроме чисел и выводит только всю таблицу целиком, вот так:
А нужно чтобы каждый заказ был отдельно, и друг за другом или еще как-то так, чтобы это удобно было потом распечатать.
Вот ссылка на форму
Ответы (1 шт):
Подчеркну особо, что эта задача должна решаться скриптами. Из-за отсутствия порядка данных решение формулами остается лишь возможным в теоретическом плане. Практическое применение потребует больших затрат на сопровождение.
Введение
Ради спортивного интереса.
- Можно делить номер строки на количество колонок в карточке, остаток от деления - это будет положение элемента в карточке
- Можно делить номер строки на количество колонок в карточке, целая часть - это будет номер карточки
Условно, для трех карточек в которых по три поля
Формулы VLOOKUP и HLOOKUP могут "пробегать" массивы для подстановки по индексам.
Сама задача плохо подходит для формул, поэтому потребуется подготовить данные. Я в примере их просто все привел к строке. Но можно заморочиться.
Решение
Построение заголовков карточек
=ARRAYFORMULA(HLOOKUP(
MOD(ROW(Подготовленные_данные)-1;COLUMNS(Подготовленные_данные));
{COLUMN(Подготовленные_данные);Подготовленные_данные};
2;
0
))
Построение значений карточек
=ARRAYFORMULA(HLOOKUP(
MOD(ROW(Подготовленные_данные)-1;COLUMNS(Подготовленные_данные));
{COLUMN(Подготовленные_данные);Подготовленные_данные};
QUOTIENT(ROW(Подготовленные_данные)-1;COLUMNS(Подготовленные_данные))+3;
0
))
Итоговая формула
=QUERY(ARRAYFORMULA(IFNA(
{
HLOOKUP(
MOD(ROW(Подготовленные_данные)-1;COLUMNS(Подготовленные_данные));
{COLUMN(Подготовленные_данные);Подготовленные_данные};
2;
0
)\
HLOOKUP(
MOD(ROW(Подготовленные_данные)-1;COLUMNS(Подготовленные_данные));
{COLUMN(Подготовленные_данные);Подготовленные_данные};
QUOTIENT(ROW(Подготовленные_данные)-1;COLUMNS(Подготовленные_данные))+3;
0)
};
""
));"select * where (Col1<>'' and Col2<>'') or(Col1='' and Col2='')")
Идеи
По идее, можно разбить на колонки, чтобы карточек на единицу площади получалось больше.






