使用非唯一密钥在Google表格中左加入

时间:2018-07-18 01:20:12

标签: google-apps-script google-sheets

我希望在Google表格中加入2个数组,但要使用的键不是唯一的。索引匹配和vlookups无法工作。我尝试了一个附加组件,但是我不想依靠附加组件来工作24/7。如果代码损坏,我希望自己进行编辑。

客户列表

Customer ID      Category
101              Fruit
102              Fruit
103              Sweets

项目列表

Item             Category
Apple            Fruit
Pear             Fruit
Banana           Fruit
Chocolate        Sweets
Sugar            Sweets

输出试图获取

Customer ID    Item        Category
101            Apples      Fruit
101            Pears       Fruit
101            Bananas     Fruit
102            Apples      Fruit
102            Pears       Fruit
102            Bananas     Fruit
103            Chocolate   Sweet
103            Sugar       Sweet

编辑 这是我尝试过的一件事,但是很慢,有时会中断:

function LEFTJOIN(range,range2,header) {
  var output = [];

  // checks if header
  var value;
    if(header == 1) {
      output.push(range[0]);
      value=header;
    } else if(header == "") {
      value=0;
    } else {
      value=0;
    }  
  //Duplicates array
  for(var i=0; i<range2.length; i++) {
    for(var j=value, jLen=range.length; j<jLen; j++) {
      output.push(range[j]);
    }
  }
  return output;
}

然后在Google表格中我在一个单元格中调用此函数,但就像我说的那样,它非常慢。

Google Sheets Screenshot

1 个答案:

答案 0 :(得分:0)

2个公式即可完成工作:

enter image description here

G1中的公式:

=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(JOIN(",",FILTER(REPT(A2:A&"-"&B2:B&",",COUNTIF(E2:E,B2:B)),A2:A>0)),",")),"-"))

I1中的公式:

=TRANSPOSE(SPLIT(TEXTJOIN("-",1,FILTER(IF(G1:G=OFFSET(G1:G,1,),"",VLOOKUP(H:H,{UNIQUE(FILTER(E2:E,E2:E<>"")),TRANSPOSE(SPLIT(JOIN("",FILTER(D2:D& IF(E2:E<>OFFSET(E2:E,1,),",","-"),D2:D<>"")),","))},2,)),G:G<>"")),"-"))

列表2必须按类别进行排序。