谷歌表格阻止脚本'delete duplicate row'将所有公式转换为值并仅删除列A:A中的重复项



正如标题中提到的,我必须停止这个脚本 从将所有公式转换为值并仅删除 A 列的重复行:A

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

在我看来,您正在尝试将其设置为onEdit((函数,因此这里是:

为了使此功能正常工作,您必须编辑 column1 中的单元格。(即您必须实际更改第一列中的一个单元格(

function onEdit(e) {
  var sheet=e.range.getSheet();
  //e.source.toast('flag1');
  var data=sheet.getDataRange().getValues();
  var newData = [];
  var d=0;
  if (sheet.getName()=="Sheet1") { 
    //e.source.toast('flag2');
    if (e.range.columnStart ==1) {
      for(var i=0;i<data.length;i++) {
        if(newData.indexOf(data[i][0])==-1) {
          newData.push(data[i][0]);
        }else{
          sheet.deleteRow(i+1-d++);
        } 
      }
    }
  }
}

注意:您无法通过从脚本编辑器运行此脚本来以正常方式测试它。 必须提供事件对象。 我通常只是通过编辑适当的页面来调试它以生成 onEdit(( 触发器。

这不会删除空白行:

function onEdit(e) {
  var sheet=e.range.getSheet();
  //e.source.toast('flag1');
  var data=sheet.getDataRange().getValues();
  var newData = [];
  var d=0;
  if (sheet.getName()=="Sheet1") { 
    //e.source.toast('flag2');
    if (e.range.columnStart ==1) {
      for(var i=0;i<data.length;i++) {
        if(data[i][0]=='')continue;
        if(newData.indexOf(data[i][0])==-1) {
          newData.push(data[i][0]);
        }else{
          sheet.deleteRow(i+1-d++);
        } 
      }
    }
  }
}

工作代码在这里 ^_^ B4的公式是=max(A:A)+1 如果您删除一行或插入新行,它将在此处给出 B4 的值,即 A:A 列的最大数量 + 1,并删除 A:A 中重复的空行

function onEdit(e) {
var spreadsheet = SpreadsheetApp.getActive();
    var ss = SpreadsheetApp.getActive()
    var actualSheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
if (actualSheetName == "sheet 1" || actualSheetName == "sheet 2")  {
if (e.range.getColumn() == 1)  {
  if (e.value == '' || e.value == null) { 
    var B1Value = SpreadsheetApp.getActiveSheet().getRange("B4").getValue();
    var s = SpreadsheetApp.getActiveSheet();
  var r = s.getActiveCell();
    var row = r.getRow();
    var time = new Date();    
    SpreadsheetApp.getActiveSheet().getRange('A' + row.toString()).setValue(B1Value);
    }}}{
  var sheet=e.range.getSheet();
  var data=sheet.getDataRange().getValues();
  var newData = [];
  var d=0;
  if (sheet.getName()=="PI-Analy attentes") { 
    if (e.range.columnStart ==1) {
      for(var i=0;i<data.length;i++) {
        if(newData.indexOf(data[i][0])==-1) {
          newData.push(data[i][0]);
        }else{
          sheet.deleteRow(i+1-d++);
        }}}}}}

最新更新