Как getRange во всех ячейках появляются при изменении формы данных для широкой и длинной формы по названию ежемесячных столбцов GooglespreadSheet - PullRequest
0 голосов
/ 26 апреля 2019

В R библиотека data.table dcast () может преобразовать набор данных из широкой в ​​длинную форму, как я могу это сделать в googlespreadsheet?

Лист1

Name       Type YTD JAN FEB MAR
Product 1   A   8    1  3   4
Product 2   B   519  41 23  455
Product 3   C   32   2  25  5
   NA       D   3    NA 2   1

Sheet1

Лист2 A B C D E F 1 Название Тип YTD JAN FEB MAR 2 = фильтр (Лист1! A2: F5, а не (isblank (Лист1! A2: A5)))

Sheet2

Показать измененные данные в Sheet3 от А1

[Sheet3[3]

** Столбец C для YTD необязательно.

Скорректированный мной скрипт не работает : из Танаике

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

  var values = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues(); // Retrieve values
  var Result_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

  var result = [];
  for (var i = 1; i < values.length; i++) {
    for (var j = 1; j < values[i].length; j++) {
      result.push([values[0][i], values[j][0], values[j][i]]);
    }
  }

  Result_sheet.getRange().setValues(result); // Put result
}

Я слишком новичок в java-скрипте, который не может объяснить причину.

1 Ответ

1 голос
/ 26 апреля 2019

Хорошо, так что, насколько я понимаю, вы хотите взять первую таблицу, удалить пустые продукты и распаковать ее.

Причина, по которой скрипт tnaike не сработал для вас, заключается в том, что у вас есть два столбца лидеров (product и type), а не один. Похоже, это все правильно настроить.

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

  var values = sheet.getDataRange().getValues(); // Retrieve values
  var Result_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

  var result = [];
  result.push(["Name","Type","Month","QTY"]);
  for (var i = 1; i < values.length; i++) {

    for (var j = 1; j < values[i].length; j++) {
      if (values[j][0].length < 1) continue;
      if (values[0][i].length < 1) continue;
      result.push([ values[j][0],values[j][1], values[0][i], values[j][i]]);
    }
  }

  Result_sheet.getRange(1,1,result.length, result[0].length).setValues(result); // Put result
  Result_sheet.sort(1);
}

это приводит к:

Name/Type/Month/QTY
P1  A   Ja  1
P1  A   Fe  3
P1  A   Ma  4
P2  B   Ja  41
P2  B   Fe  23
P2  B   Ma  455
P3  C   Ja  2
P3  C   Fe  25
P3  C   Ma  5
...