Попробуйте:
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]]);
}
});
});
}
анимация листов:
Ответ на 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');
}