Google 表格和应用程序脚本;全局变量列表/数组

问题描述 投票:0回答:1

我的 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();
}
javascript list variables google-apps-script google-sheets
1个回答
0
投票

建议

我建议重构您的脚本,因为您当前的版本涉及在不同场景中使用的多个函数。例如,您在工作表上将

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列上。

参考

© www.soinside.com 2019 - 2024. All rights reserved.