我的 Google AppsScript 表格程序需要一些帮助。基本上在我的代码中,我需要 Trans2List 附加从函数 RemoveDup2V1 中附加的元素,该函数是从函数 RemoveDup1 调用的。当我尝试 console.log 函数 clean1 中的列表时,它返回 []。我已经附上了一张虚拟表。基本上每次有重复的 Trans AND Time 时,我都需要将第二个重复项重命名为空白或其他任何内容,这就是 clean1 所做的。比较两行后,仅将重复项添加到 Trans2List 和 Time2List 中。我认为这是全局数组/列表的问题,但我不确定也不知道如何修复它。为了运行 clean1 函数,我在工作表中添加了一个菜单。非常感谢任何帮助/建议!非常感谢您的努力和帮助!如果还需要什么,请告诉我。
虚拟表链接:https://docs.google.com/spreadsheets/d/1Nd1hUsOiX9eobjQzaVSQzsoWzEW7d-Fx27mHCmDeUw4/edit?usp=sharing
Google 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) {
if(Trans1.localeCompare(Trans2) == 0){
if(Time1.localeCompare(Time2) == 0){
RemoveDup2V1(Trans2, Time2);
return(Trans1);
}else{
return(Trans1)
}
}else{
return(Trans1)
}
}
function RDR1(Trans1, Trans2, Time1, Time2){
RemoveDupV1 = RemoveDup1(Trans1, Trans2, Time1, Time2);
return(RemoveDupV1)
}
function RemoveDup2V1(Trans2,Time2) {
Trans2List.push(Trans2);
Time2List.push(Time2);
}
function RemoveDup2(Trans1, Trans2, Time1, Time2) {
if(Trans1.localeCompare(Trans2) == 0){
if(Time1.localeCompare(Time2) == 0){
return(Time1);
}else{
return(Time1)
}
}else{
return(Time1)
}
}
function RDR2(Trans1, Trans2, Time1, Time2){
RemoveDupV2 = RemoveDup2(Trans1, Trans2, Time1, Time2);
return(RemoveDupV2)
}
function clean1() {
console.log(Trans2List);
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getRange('D:D').getDisplayValues();
var range = [];
var index = -1
data.forEach(function(e, i){
index = -1;
if (e[0] == Trans2List[index + 1])
if(e[1] == Time2List[index +1]) range.push("D" + (i + 1));
});
var newRange = [];
for(var p = 0; p < range.length-1; p++){
newRange.push(range[index+2]);
index = index + 2;
}
sheet.getRangeList(newRange).clearContent();
}
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('Clear Dupes')
.addItem('Clear All Dupes', 'clean1')
.addSeparator()
.addToUi();
}
我建议重构您的脚本,因为您当前的版本涉及在不同场景中使用的多个函数。例如,您在工作表上将
RDR1
或 RDR2
作为自定义函数运行,然后通过自定义菜单执行 clean1
函数。
重构脚本示例
function test() {
var data = SpreadsheetApp.getActive().getActiveSheet().getRange('A:B').getDisplayValues();
var res = data.map((x, i, arr) => {
try {
return (x[0] == arr[i + 1][0] && x[1] == arr[i + 1][1]) ? [x[0], ''] : arr[i + 1];
} catch {
}
}).filter(x => x);
res.unshift(data[0])
SpreadsheetApp.getActive().getActiveSheet().getRange(1, 4, res.length, res[0].length).setValues(res);
}
演示
将结果放在D列上。
参考