如何按月列名称GoogleSheet重塑宽到长格式的数据

时间:2019-04-25 04:23:29

标签: google-apps-script google-sheets reshape unpivot melt

在R中,data.table库dcast()可以将数据集从宽形转换为长形,如何在googlespreadsheet中做到这一点?

从这种格式:

          | JAN        | FEB        | MAR 
----------+------------+------------+-----------
Product 1 |          1 |          2 |          3
Product 2 |          4 |          5 |          6
Product 3 |          7 |          8 |          9

将其转换为以下格式:

Date|  Product  | Qty
-----------+-----------+----
JAN | Product 1 |   1
FEB | Product 2 |   4
MAR | Product 3 |   9
JAN | Product 2 |   4
FEB | Product 1 |   2
JAN | Product 3 |   7
MAR | Product 2 |   6
FEB | Product 3 |   8
MAR | Product 1 |   3

我们有解决方案吗?

1 个答案:

答案 0 :(得分:1)

这个示例脚本怎么样?

示例脚本:

使用此脚本时,请首先将输入值放入单元格“ A1:D4”,然后运行myFunction()

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getRange("A1:D4").getValues(); // Retrieve values

  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]]);
    }
  }

  sheet.getRange("A6:C14").setValues(result); // Put result
}
  • 在此示例脚本中,它假设以下情况。
    • 将输入值放入活动工作表的单元格“ A1:D4”。
    • 将输出值放入活动工作表的单元格“ A6:C14”。

结果:

enter image description here

其他模式:

result.push([values[0][i], values[j][0], values[j][i]]);修改为temp.push([values[0][j], values[i][0], values[i][j]]);时,可获得以下结果。

enter image description here

注意: