Конвертировать доклад табулировать (массив) в формат простой таблицы

У меня есть доклад табулировать, также названный массив или "crosstab". Например, в заголовках колонн показывается имя клиента, в заголовках строк имя продукта и в пересечении число продуктов, проданных каждому клиенту.

+---+------------+-----------+-----------+-----------+
|   |     A      |     B     |     C     |     D     |
+---+------------+-----------+-----------+-----------+
| 1 |            | Cliente 1 | Cliente 2 | Cliente 3 |
| 2 | Producto 1 | 4         | 2         | 6         |
| 3 | Producto 2 | 7         | 8         | 6         |
| 4 | Producto 3 | 6         | 3         | 5         |
| 5 | Producto 4 | 3         | 3         | 8         |
+---+------------+-----------+-----------+-----------+

Я требую перемещать данные в формат простой таблицы, а именно, колонна для заголовков линий, колонны для заголовков колонн и колонны для стоимости, как он появляется далее:

+----+---------------------+------------------------+---------+
|    |          A          |           B            |    C    |
+----+---------------------+------------------------+---------+
|  1 | Encabezados de fila | Encabezados de columna | Valores |
|  2 | Producto 1          | Cliente 1              | 4       |
|  3 | Producto 2          | Cliente 2              | 8       |
|  4 | Producto 3          | Cliente 3              | 5       |
|  5 | Producto 4          | Cliente 1              | 3       |
|  6 | Producto 1          | Cliente 2              | 2       |
|  7 | Producto 2          | Cliente 3              | 6       |
|  8 | Producto 3          | Cliente 1              | 6       |
|  9 | Producto 4          | Cliente 2              | 3       |
| 10 | Producto 1          | Cliente 3              | 6       |
| 11 | Producto 2          | Cliente 1              | 7       |
| 12 | Producto 3          | Cliente 2              | 3       |
| 13 | Producto 4          | Cliente 3              | 8       |
+----+---------------------+------------------------+---------+

Как я могу добиваться этого используя функции рабочего листа Google?

Разъяснения

Вопрос, вдохновленный в How do you верьте в “повторно повернул центр” in в Google Sheets? - Stack Overflow и в личном опыте.

3
задан 23.05.2017, 15:39
2 ответа

В этом файле находится пример как реализовывать превращение. Далее описываются шаги, которые нужно продолжать.

  1. Создавать лист и называть ее "Aux".
  2. В листе, созданном в предыдущем шаге добавлять следующие формулы: Понимают, что данные о докладе табулировать находятся в так называемом листе data, что ячейка A1 находится в мишени, и что он не включает данных, чуждых докладу.
    A1: =COUNTA(data!A:A) Число строк.
    A2: =COUNTA(data!1:1) Число колонн.
    A3: =CELL("address",data!A1) Промежуточное вычисление.
    A4: =LEFT(A3,FIND("!",A3)-1) Имя листа с данными шрифт.
  3. Создавать новый лист
  4. В новом листе добавлять следующее
    A1: Заголовки линии
    A2:
=ArrayFormula(
  VLOOKUP(
    MOD(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))-1,Aux!A1)+1+1,
    {(ROW(INDIRECT("A1:A"&Aux!A1+1))),INDIRECT(Aux!A4&"!R1C1:R"&Aux!A1+1&"C"&Aux!A2+1,false)},
    2
  )
)

B1: Заголовки колонны
B2:

=ArrayFormula(
  VLOOKUP(
    SIGN(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))),
    {(ROW(INDIRECT("A1:A"&Aux!A1+1))),INDIRECT(Aux!A4&"!R1C1:R"&Aux!A1+1&"C"&Aux!A2+1,false)},
    MOD(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))-1,Aux!A2)+1+2
  )
)

C1: Стоимость
C2:

=ArrayFormula(
  VLOOKUP(
    MOD(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))-1,Aux!A1)+1+1,
    {(ROW(INDIRECT("A1:A"&Aux!A1+1))),INDIRECT(Aux!A4&"!R1C1:R"&Aux!A1+1&"C"&Aux!A2+1,false)},
    MOD(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))-1,Aux!A2)+1+2
  )
)

Описание использованных сооружений

ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2)) определи массив чисел последующих, размер которых соответствует числу линий, которых требуют в конечном результате.

MOD(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))-1,Aux!A1)+1 определи индекс заголовка линии.

MOD(ROW(INDIRECT("A1:A"&Aux!A1*Aux!A2))-1,Aux!A2)+1 определи индекс заголовка колонны.

{(ROW(INDIRECT("A1:A"&Aux!A1+1))),INDIRECT(Aux!A4&"!R1C1:R"&Aux!A1+1&"C"&Aux!A2+1,false)} думайте, что массив, первая колонна которого - индекс линии и следующие, соответствует данным о докладе табулировать.

1
ответ дан 24.11.2019, 14:42

Я собрал решение твоей проблемы с google apps рукописный шрифт, что я думаю, что она проще, чем предложение до настоящего времени.

В редактор кода листа помести ему следующее:

function onOpen() 
{
    Convert();
};

function onEdit() 
{
    Convert();
};

function Convert()
{
  var spread = SpreadsheetApp.getActive();
  var sheet_ori = spread.getSheetByName("Original");
  var sheet_dst = spread.getSheetByName("Destino");

  var values_ori = sheet_ori.getDataRange().getValues();

  var names = values_ori[0];
  var cont = 1;

  for(var i = 1 ; i < values_ori.length ; ++i)
  { 
    var row = values_ori[i];
    var caption = row[0];
    for(var j = 1 ; j < row.length ; ++j)
    {
        sheet_dst.getRange(cont, 1).setValue(caption);
        sheet_dst.getRange(cont, 2).setValue(names[j]);
        sheet_dst.getRange(cont, 3).setValue(row[j]);
        cont++;
    }
  }
}

Запиши файл кода. Каждый раз, когда кто-то изменил "Первоначальный" лист станет отвечающим совремнным требованиям лист Я "предназначаю".

Я надеюсь, что он подает тебя.

Вопрос казался мне очень интересным с дидактической точки зрения, так что я использовал ее, чтобы печатать в моем blog..., я надеюсь, что он не беспокоит тебя: http://googleappscriptsweb.blogspot.com.es/2016/06/como-convertir-un-matriz-de-datos-en.html

1
ответ дан 24.11.2019, 14:42
  • 1
    Он не беспокоит меня, наоборот я чувствую себя честным. Нужно упоминать о том, что соответствующий способ присуждать включает ссылку в post, как ты это сделал, но tambi и # 233; n упоминать об имени и включать соединение в профиль автора. М и # 225; s детали в blog.stackoverflow.com/2009/06/attribution-required , P.D. я, должно быть, продолжаю более часто мой собственный совет:) – Rubén 11.06.2016, 16:10
  • 2
    Имя и соединение, помещенные. в и # 250; n - новичок.... он помнит что помечает какой-то soluci и # 243; n как v и # 225; lida, если он следует тебе, и #250; til:) – Pako LordPakus 11.06.2016, 18:05

Теги

Похожие вопросы