Google Sheets与App Script:使用函数汇总多组数值
问题描述
我制作了一个新的测试表格,其中包含预期结果和当前代码运行的实际结果。我已尽力编写代码,但最终效果不佳。
核心需求
将空白Trans对应的Quantity、Price、Disc数值汇总到对应Trans条目下。注意:请忽略与本问题无关的变量/参数"Category"。
现有AppsScript代码
var RemoveDupV1 = ""; var RemoveDubVV1 = ""; var Time2List = []; var Trans2List = []; var RemoveDupV2 = ""; var RemoveDupV3 = ""; var RemoveDupV4 = 0; var RemoveDupV5 = 0; var RemoveDupV6 = 0; function RemoveDup1(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) { if(Trans1.localeCompare(Trans2) == 0){ if(Time1.localeCompare(Time2) == 0){ RemoveDup2V1(Trans2, Time2); PropertiesService.getScriptProperties().setProperty('myArray', Trans2); return(Trans1); }else{ return(Trans1) } }else{ return(Trans1) } } function RDR1(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){ RemoveDupV1 = RemoveDup1(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2); return(RemoveDupV1) } function RemoveDup2V1(Trans2,Time2) { Trans2List.push(Trans2); Time2List.push(Time2); } // Time function RemoveDup2(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) { if(Trans1.localeCompare(Trans2) == 0){ if(Time1.localeCompare(Time2) == 0){ return(Time1); }else{ return(Time1) } }else{ return(Time1) } } function RDR2(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){ RemoveDupV2 = RemoveDup2(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2); return(RemoveDupV2) } // Category function RemoveDup3(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) { if(Trans1.localeCompare(Trans2) == 0){ if(Time1.localeCompare(Time2) == 0){ return(Category); }else{ return(Category) } }else{ return(Category) } } function RDR3(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){ RemoveDupV3 = RemoveDup3(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2); return(RemoveDupV3) } // Quantity function RemoveDup4(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) { if(Trans1.localeCompare(Trans2) == 0){ if(Time1.localeCompare(Time2) == 0){ return(Quantity1 + Quantity2); }else{ return(Quantity1) } }else{ return(Quantity1) } } function RDR4(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){ RemoveDupV4 = RemoveDup4(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2); return(RemoveDupV4) } // Disc function RemoveDup5(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) { if(Trans1.localeCompare(Trans2) == 0){ if(Time1.localeCompare(Time2) == 0){ return(Disc1 + Disc2); }else{ return(Disc1) } }else{ return(Disc1) } } function RDR5(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){ RemoveDupV5 = RemoveDup5(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2); return(RemoveDupV5) } // Price function RemoveDup6(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) { if(Trans1.localeCompare(Trans2) == 0){ if(Time1.localeCompare(Time2) == 0){ return(Price1 + Price2); }else{ return(Price1) } }else{ return(Price1) } } function RDR6(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){ RemoveDupV6 = RemoveDup6(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2); return(RemoveDupV6) } function clean1() { var data = SpreadsheetApp.getActive().getActiveSheet().getRange('A2:B11').getDisplayValues(); var res = data.map((x, i, arr) => { try { return (x[0] == arr[i + 1][0] && x[1] == arr[i + 1][1]) ? ['', x[1]] : arr[i + 1]; } catch { } }).filter(x => x); res.unshift(data[0]) SpreadsheetApp.getActive().getActiveSheet().getRange(2, 7, res.length, res[0].length).setValues(res); } function onOpen(e) { SpreadsheetApp.getUi() .createMenu('Clear Dupes') .addItem('Clear all Dupes', 'clean1') .addSeparator() .addToUi(); }
内容的提问来源于stack exchange,提问作者Gurman3756
相关产品推荐
相关产品推荐

