Google脚本从选择范围(不是整张)中删除重复项

时间:2018-02-07 03:41:23

标签: google-apps-script google-sheets

以下是Google表格脚本,用于从电子表格中删除重复的行。虽然它确实可以删除重复的行,但它也会破坏流程中的单元格公式。我目前有一系列工作表,其中所有原始数据都包含在列A:P中,并且我的所有公式都被降级为列Q:T

在我尝试将以下脚本限制为仅在列A:P上工作时,我在运行脚本时收到缺少的参数错误。

var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange("A2:P").getValues();

TL:DR,我喜欢这个剧本,但是我想限制它的运行范围。有帮助吗?谢谢。

https://developers.google.com/apps-script/articles/removing_duplicates

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.join() == newData[j].join()){
    duplicate = true;
  }
}
if(!duplicate){
  newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, 
newData[0].length).setValues(newData);
}
编辑:我认为以下是一个有效的问题,但我想补充一个新的观察,可能会对正在发生的事情产生一些影响(??)。当我从工作表内启动查找和替换以删除单词“null”的所有实例时,工作表将删除null并使每个其他单元格单独使用。但是,如果我运行一个脚本来删除'null',它会重新格式化我的所有单元格,从而更改日期和时间。次数到小数。是否有一种方法可以运行脚本并避免整体意外操作,如图纸宽重新格式化?

1 个答案:

答案 0 :(得分:0)

您需要使用getRange()功能指定您要使用的范围。

var sheet = SpreadsheetApp.getActiveSheet();
var rng = sheet.getRange("A2:P")
var data = rng.getValues();

此外,您使用此行sheet.clearContents();清除整个工作表,而不是使用此

rng.clearContents()

这样您只能清除rng指定范围内的内容 您的最终代码应如下所示

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