按单元格的前 20 个字符定义重复行



我正在为 Google 电子表格运行基本的重复数据删除脚本,但遇到了障碍。我想仅根据我定义的列中的前 20 个字符而不是列的全部内容来确定一行是否重复

。我进行了多次搜索,甚至没有找到任何接近的东西。我一直想办法删除前 X 个字符,但这对我没有任何好处。

任何帮助将不胜感激。

function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
if(row[0] == newData[j][0] && row[4] == newData[j][4]){
duplicate = true;
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

您快到了,如果您可以将电子表格 B 列的前 20 个字符与保存的数组进行比较,则可以找到重复项。

substring((是你需要使用的函数

阅读更多: https://www.w3schools.com/jsref/jsref_substring.asp

function removeDuplicates() 
{
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(var i in data)
{
var row = data[i];
var duplicate = false;
for(var j in newData)
{
//row[1]=> column B value 
if(row[1].substring(0,20) == newData[j][1].substring(0,20)){
duplicate = true;
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

首先,您需要一个数组,其中包含指定列中所有值的前 20 个字符

var columnNumber = 2
var values = data.map(function(el){ 
return /^.{0,20}/.exec(el[columnNumber + 1]).toString() 
})

然后,您想遍历数组并查看是否存在重复项

for (var row = 1; row < values.length; row++){
var dupIndex = values.indexOf(values[row],row + 1)
if (~dupIndex)
{
Browser.msgBox("Row " + (row + 1) + " and Row " + (dupIndex + 1) + " are identical")
// Act on the duplicate rows here
}
}

我希望这至少能提供一个好的起点,祝你好运!

最新更新