Google sheets 如何自动格式化数据以在Google工作表中创建树状图?

Google sheets 如何自动格式化数据以在Google工作表中创建树状图?,google-sheets,treemap,Google Sheets,Treemap,我想从google电子表格中的动态数据创建一个树形图。到目前为止,我成功地获得了Excel可以使用的格式的表,但我不知道如何将该表转换为Google sheet可以用来创建此树状图的表 Excel可以使用这些数据。不是谷歌表单 我的数据如下所示: Categories Item Value __________ ______ _____ category_1 item_1 5 category_1 item_2 20 category_1 item_3 1 categor

我想从google电子表格中的动态数据创建一个树形图。到目前为止,我成功地获得了Excel可以使用的格式的表,但我不知道如何将该表转换为Google sheet可以用来创建此树状图的表

Excel可以使用这些数据。不是谷歌表单

我的数据如下所示:

Categories  Item    Value
__________  ______  _____
category_1  item_1  5
category_1  item_2  20
category_1  item_3  1
category_2  item_4  0
category_2  item_5  5
category_2  item_6  18
category_3  item_7  16
category_4  item_8  7
category_4  item_9  16
我想找到一种方法,将这些数据转换为下表中的数据,这可以被GoogleSheet使用

Item        Parent      Value
__________  __________  _____
Categories              88
category_1  Categories  26
item_1      category_1  5
item_2      category_1  20
item_3      category_1  1
category_2  Categories  23
item_4      category_2  0
item_5      category_2  5
item_6      category_2  18
category_3  Categories  16
item_7      category_3  16
category_4  Categories  23
item_8      category_4  7
item_9      category_4  16

我还没有找到一种方法来解决这个问题,我想知道是否有人遇到过同样的问题

您可能可以使用这个简单的脚本函数作为示例:

function makeTree() {
  var srcRange = SpreadsheetApp.getActiveSheet().getRange('A2:C10'),
      tree = {'.Categories': 0}, key;

  // Fill tree object with source data
  srcRange.getValues().forEach(function(rowValues) {
    // Add row value to the root
    tree['.Categories'] += rowValues[2];
    // Add it to "Category" level
    key = 'Categories.' + rowValues[0];
    if (tree[key] == undefined) {
      tree[key] = rowValues[2];
    } else {
      tree[key] += rowValues[2];
    }
    // Add it to "Item" level too
    key = rowValues[0] + '.' + rowValues[1];
    if (tree[key] == undefined) {
      tree[key] = rowValues[2];
    } else {
      tree[key] += rowValues[2];
    }
  });

  // Format tree rows for output
  var values = [];
  for (key in tree) {
    var subKeys = key.split('.');
    values.push([subKeys[1], subKeys[0], tree[key]]);
  }

  // Fill target data rows 
  var targetRange = srcRange.offset(0, 4, values.length);
  targetRange.setValues(values);
}
在这里,我们使用带点分隔符的复合字符串键在单个JS对象中收集所有数据。在填充目标范围之前,就绪对象将转换为二维数组。因此,我们在同一张表上有两个范围:


Excel如何“使用”这些数据?您的意思是Excel有内置工具将一个数据区域转换为另一个数据区域吗?Excel可以使用此数据,因为它是生成树映射所需的默认格式。因此,我们可以将此范围作为Excel树映射函数的输入,并获得一个树映射。Google Sheets在将这些范围分配给内置地图功能之前需要进行更多的计算。我会尝试一下,但它看起来很完美!我正在寻找一个Google Sheets集成解决方案(具有内部功能等),但它太复杂了。非常感谢。