Google工作表数据透视表-按来自不同字段的不同行分组

时间:2019-06-25 01:35:37

标签: google-apps-script google-sheets pivot-table

我需要将一个Excel数据透视表复制到googlesheet中。假设您有一些字段,其中包含有关付款人的信息,而其他字段中则包含有关卖方的信息。所有字段都必须在“数据透视表”的“行”部分中。有人会知道一种将与买方相对应的字段(例如:买方名称,买方地址)互相放在下面,而与卖方相对应的字段也互相放在下面的方法吗?

我尝试了“分组依据”,但这似乎仅适用于相同字段的值。

以下是我创建的googlesheet的链接,其中显示了我想做的事情(sheet1),sheet2包含一些可用于该数据透视表的数据:https://docs.google.com/spreadsheets/d/1pJvlLsijsnzKbSvgLVYkGEzcA3MdpSJZIMYquy26dGM/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

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

enter image description here

最简单的方法是一种变通方法,这意味着您的初始数据看起来像这样:

enter image description here

代替:

enter image description here

可以使用Apps Script自动更改表格的布局。 这是一个示例代码,如何从工作表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());
  }  
}