想要在 3 张纸上自动排序,当一张纸被锁定时

Wanting auto sort on 3 sheets, when one is locked

请看前面关于这个问题的post;

这是上一节的好剧本;

function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = event.source.getActiveSheet().getName()
  var editedCell = event.range.getSheet().getActiveCell();
if(sheet=="Loan Inquiries"){
  var columnToSortBy = 2;
  var tableRange = "A3:G99"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }}
  else if(sheet=="Deals in Escrow"){
    var columnToSortBy = 7;
  var tableRange = "A3:I99"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
     var tableRange = "A3:I99"; //range to be sorted
     var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }
  else{return}
}}

function test_onEdit() {
  onEdit({
    user : Session.getActiveUser().getEmail(),
    source : SpreadsheetApp.getActiveSpreadsheet(),
    range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
    value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
    authMode : "LIMITED"
  });
}

这个线程成功地解决了我的问题,但是,现在我想做的是自动排序第 3 个 Sheet,它对其他人锁定,但对我自己不锁定。第 3 个 Sheet 将命名为 "Karlan Production for 2017"。我还希望第 3 个 sheet 从第 2 个 Sheet "Deals in Escrow" 中提取所有新数据,并采用与第 2 个 Sheet 相同的格式,并在导入数据时自动排序到第 3 个 Sheet,但我也可以在第 3 个 Sheet 中手动输入新交易,并且仍然能够自动更新。

我相信这会如你所愿:

function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = event.source.getActiveSheet().getName()
  var editedCell = event.range.getSheet().getActiveCell();
if(sheet=="Loan Inquiries"){
  var columnToSortBy = 2;
  var tableRange = "A3:G99"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }}
  else if(sheet=="Deals in Escrow"){
    var columnToSortBy = 7;
    var tableRange = "A3:I99"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
    combineData()
  }}
   else if(sheet=="Karlan Production for 2017"){
     var columnToSortBy = 7;
     if(editedCell.getColumn() == columnToSortBy){ 
  combineData()
   }}
  else{return}
}

function combineData(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getSheets()[1]
var lr = s.getLastRow()
var s1=ss.getSheets()[2]
var lr1 = s1.getLastRow()
var lc1=s1.getLastColumn() //get the last column of 'Karlan Production for 2017' 
var rng=s.getRange(3, 1, lr,lc1).getValues() //get 'Deals in Escrow' values
var rng1=s1.getRange(3, 1, lr1,lc1).getValues() //get 'Karlan Production for 2017' values
var rng2=[]
var rng2=rng.concat(rng1) //combine 'Deals in Escrow' and 'Karlan Production   for 2017' values (all rows)
removeDuplicates(rng2) // call remove duplicates sending combined array  
}

function removeDuplicates(data) {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var s1=ss.getSheets()[2]
  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);//create array of non duplicate rows
    }
  }
  s1.clearContents(); //clear 'Karlan Production for 2017'
  var sor=s1.getRange(3, 1, newData.length,     newData[0].length).setValues(newData); //set new array
  sor.sort( { column : 7, ascending: true } );//sort new data
}

添加新 sheet 后,单击 sheet 选项卡上的箭头。 单击保护 Sheet。在弹出窗口中,输入描述并单击 Sheet 按钮。单击设置权限按钮。范围中 编辑权限弹出窗口单击 'Only you' 的箭头。 Select 'Custom' 并添加您想要的其他人的电子邮件地址 能够编辑 sheet。点击完成。