javascript эквивалент функции для vlookup - PullRequest
0 голосов
/ 24 января 2020

Я новичок здесь, поэтому я был бы признателен за некоторые рекомендации по написанию функции Google Script, которая устанавливает значение в столбце B листа 1, просматривая значение в столбце A листа 1 в столбце A листа 2 до * 1010. *.

Чтобы быть очень точным c - Лист 1 содержит

  A      B
names  emails

Лист 2 содержит

  A      B       C
date   names   emails

Я хочу вставить в столбец B из листа 1 адрес электронной почты из листа 2 с именем в качестве уникального идентификатора.

1 Ответ

0 голосов
/ 25 января 2020

Попробуйте:

function runOne() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(2,1,sh.getLastRow()-1,3);
  var hA=sh.getRange(1,1,1,3).getValues()[0];
  var hi={nA:[]};
  hA.forEach(function(h,i){hi[h]=i;});
  var v=rg.getValues();
  v.forEach(function(r,i){
    var r1=r[hi['names']];
    var r2=r[hi['emails']];
    if(!hi.hasOwnProperty(r[hi['names']])) {
      hi[r[hi['names']]]=[];
      hi[r[hi['names']]].push(r[hi['emails']]);
      hi.nA.push(r[hi['names']]);
    }else{
      if(hi[r[hi['names']]].indexOf(r[hi['emails']])==-1) {
        hi[r[hi['names']]].push(r[hi['emails']]);
      }
    }
  });
  sh.getRange(1,5,sh.getLastRow(),2).clearContent();
  sh.getRange(1,5,1,2).setValues([['names','emails']]);
  SpreadsheetApp.flush();
  Utilities.sleep(2000);
  var row=2;
  var col=5;
  hi.nA.forEach(function(n,i){
    hi[n].forEach(function(e,j){
      if(!j) {
        sh.getRange(row++,col,1,2).setValues([[n,e]]);
      }else{
        sh.getRange(row++,col,1,2).setValues([['',e]]);
      }
    });
  });
}

анимация листов:

enter image description here

Ответ на JSON вопрос:

function jsonplay() {
  var json=JSON.parse('{"cartItems":{"1c383cd30b7c298ab50293adfecb7b18":{"id":"35","image":"images\/products\/banner\/2019-11-02-10-59-29.jpeg","name":"Voltas 1.2 Ton 3 Star Split Inverter AC - White","model":"153V DZV (R32)","qty":12,"price":27999,"online_charge":"50","cod":"50","free_delivery":"no","rowid":"1c383cd30b7c298ab50293adfecb7b18","subtotal":335988},"3295c76acbf4caaed33c36b1b5fc2cb1":{"id":"66","image":"images\/products\/banner\/2019-11-22-14-53-27.jpg","name":"Alarm Clock With LED","model":"AA-3007","qty":2,"price":228,"online_charge":"0","cod":"0","free_delivery":"no","rowid":"3295c76acbf4caaed33c36b1b5fc2cb1","subtotal":456}}}');
  var keys=Object.keys(json.cartItems);
  var html='<style>th,td{border:1px solid black}</style><table><tr><th>id</th><th>image</th><th>name</th><th>model</th><th>qty</th><th>Price</th><th>online_charge</th><th>cod</th><th>free_delivery</th><th>rowid</th><th>subtotal</th></tr>';
  Logger.log(keys);
  for(key in json.cartItems) {
    var obj=json.cartItems[key];
    html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',obj.id,obj.image,obj.name,obj.model,obj.qty,obj.price,obj.online_charge,obj.cod,obj.free_delivery,obj.rowid,obj.subtotal);
  }
  html+='</table>';
  var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Data');
}
...