首页 > 解决方案 > 谷歌工作表数据透视表 - 按来自不同字段的不同行分组

问题描述

我需要将一个 excel 数据透视表复制到 googlesheet 中。假设您有包含付款人信息的字段和其他包含卖方信息的字段。所有字段都必须位于数据透视表的“行”部分。有谁知道如何将与买方相对应的字段(例如:买方姓名、买方地址)和与卖方相对应的字段相互放在一起?

我已经尝试过 Group By 但这似乎只适用于同一字段的值。

这是我创建的 googlesheet 的链接,显示了我想要做什么(sheet1),而 sheet2 有一些数据可用于此数据透视表:https ://docs.google.com/spreadsheets/d/1pJvlLsijsnzKbSvgLVYkGEzcA3MdpSJZIMYquy26dGM/edit?usp=分享

标签: google-apps-scriptgoogle-sheetspivot-table

解决方案


如果您想要使数据透视表如下所示:

在此处输入图像描述

实现它的最简单方法是一种解决方法,这意味着您的初始数据如下所示:

在此处输入图像描述

代替:

在此处输入图像描述

可以使用 Apps 脚本自动更改表格的布局。这是一个示例代码,您可以如何从工作表中的原始数据创建工作表中originalData的“数据透视表友好”表示newLayout

  function myFunction() {
  var originalData=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('originalData');
  var newLayout=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('newLayout');
  var limit=originalData.getLastRow();
  var BuyerName=originalData.getRange('A2:A'+limit);
  var BuyerPayer=originalData.getRange('B2:B'+limit);
  var SellerName=originalData.getRange('C2:C'+limit);
  var SellerPayer=originalData.getRange('D2:D'+limit);
  var header=newLayout.getRange('A1:C1');
  var transaction1=newLayout.getRange('A2:A'+limit);
  var transaction2=newLayout.getRange('A'+(limit+1)+':A'+(2*limit-1)); 
  var buyer1=newLayout.getRange('B2:B'+limit); 
  var buyer2=newLayout.getRange('B'+(limit+1)+':B'+(2*limit-1)); 
  var seller1=newLayout.getRange('C2:C'+limit); 
  var seller2=newLayout.getRange('C'+(limit+1)+':C'+(2*limit-1));  
  header.setValues([['Transaction', 'Buyer', 'Seller']]);   
  for(var i=1;i<limit;i++)
  {
    transaction1.getCell(i,1).setValue(i);
    transaction2.getCell(i,1).setValue(i);
    buyer1.getCell(i,1).setValue(BuyerName.getCell(i,1).getValue());
    buyer2.getCell(i,1).setValue(BuyerPayer.getCell(i,1).getValue());
    seller1.getCell(i,1).setValue(SellerName.getCell(i,1).getValue());
    seller2.getCell(i,1).setValue(SellerPayer.getCell(i,1).getValue());
  }  
}

推荐阅读