gpt4 book ai didi

javascript - 删除多个工作表中的重复项

转载 作者:行者123 更新时间:2023-11-30 19:12:30 25 4
gpt4 key购买 nike

我想删除 2 个不同工作表中的重复项。

我有我的事件工作表,我想删除工作表“黑名单”中已经存在的重复项。我想对 A 列和 B 列(或仅对整个工作表中的任何值)运行此过程。找到重复项时,我想保留该行,但将值替换为“”(例如,一个空单元格)。

我有一个拼凑在一起的工作版本,但仅适用于事件工作表。

注意这是我使用的 findDuplicate 函数,我留在那里的 removeDuplicate 函数是为了不弄乱任何东西:)

// this is a Google Apps Script project

function onOpen() {
var spreadsheet = SpreadsheetApp.getActive();
var menuItems = [
{ name: 'Find duplicates...', functionName: 'findDuplicate' },
{ name: 'Remove duplicates...', functionName: 'removeDuplicate' }
];
spreadsheet.addMenu('Duplicates', menuItems);
}

function removeDuplicate() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();
var data = range.getValues();

var rowNum = range.getRow();
var columnNum = range.getColumn();
var columnLength = data[0].length;

var uniqueData = [];
var duplicateData = [];

// iterate through each 'row' of the selected range
// x is
// y is
var x = 0;
var y = data.length;

// when row is
while (x < y) {
var row = data[x];
var duplicate = false;

// iterate through the uniqueData array to see if 'row' already exists
for (var j = 0; j < uniqueData.length; j++) {
if (row.join() == uniqueData[j].join()) {
// if there is a duplicate, delete the 'row' from the sheet and add it to the duplicateData array
duplicate = true;
var duplicateRange = sheet.getRange(
rowNum + x,
columnNum,
1,
columnLength
);
duplicateRange.deleteCells(SpreadsheetApp.Dimension.ROWS);
duplicateData.push(row);

// rows shift up by one when duplicate is deleted
// in effect, it skips a line
// so we need to decrement x to stay in the same line
x--;
y--;
range = sheet.getActiveRange();
data = range.getValues();
// return;
}
}

// if there are no duplicates, add 'row' to the uniqueData array
if (!duplicate) {
uniqueData.push(row);
}
x++;
}

}

function findDuplicate() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();
var data = range.getValues();

var rowNum = range.getRow();
var columnNum = range.getColumn();
var columnLength = data[0].length;

var uniqueData = [];

// iterate through each 'row' of the selected range
for (var i = 0; i < data.length; i++) {
var row = data[i];
var duplicate = false;

// iterate through the uniqueData array to see if 'row' already exists
for (var j = 0; j < uniqueData.length; j++) {
if (row.join() == uniqueData[j].join()) {
// if there is a duplicate, highlight the 'row' from the sheet
duplicate = true;
var duplicateRange = sheet.getRange(
rowNum + i,
columnNum,
1,
columnLength
);
duplicateRange.setValue('');
}
}

// if there are no duplicates, add 'row' to the uniqueData array
if (!duplicate) {
uniqueData.push(row);
}
}
}

非常感谢您的帮助!我已经研究了几个小时,我想我应该向专家寻求建议:)

最佳答案

您的 removeDuplicate 和 findDuplicate 函数的第一行似乎确实表明您指的是事件电子表格/工作表/范围

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();
var data = range.getValues();

如果您希望能够对给定的非事件电子表格/工作表/范围使用相同的函数,则需要使用除 getActiveXXX() 之外的其他函数。

例如,要获取名为“黑名单”的工作表,您应该使用sheet = spreadsheet.getSheetByName("黑名单")(另见 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getsheetbynamename)

如果您想访问与事件范围不同的特定范围,您应该使用 getRange 方法(另请参见 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getrangea1notation )请注意,可以以不同的方式使用 getRange 方法,例如getRange("A1:D4"), getRange(1, 1, 3, 3)(参数分别为startRow,startColumn,numRows,numColumns)

此外,如果您不想对 2 列的最后一行进行硬编码,您很可能需要此函数来查找代码中的最后一行: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getlastrow(还有一个示例显示如何将 getRange() 与 getLastRow() 结合使用)。

我希望这能帮助你走得更远。请注意,我没有检查您的其余代码,只是假设您的重复数据删除逻辑工作正常,正如您在评论中提到的那样。

祝你好运!

关于javascript - 删除多个工作表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58340642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com