自动排序无法在一个Google表格中处理多个表格

时间:2016-12-23 15:03:47

标签: sorting google-sheets

我希望表2(标题为“托管交易”)按日期自动排序,而工作表1(标题为“贷款查询”)按姓氏自动排序。两张表都在一张Google表格中。我找到了以下脚本,并稍微修改了它,它在Sheet 2上工作得很好,可以按日期自动排序;

//Updates sort for range automatically
function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  var columnToSortBy = 7;
  var tableRange = "A3:T99"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}

但是,我希望第一张表格按列2中的姓氏自动排序,而不是脚本引用的第7列。
为了它的价值,我对脚本进行了以下更改,并添加到以下脚本中,该脚本适用于在工作表1的第2列中按姓氏排序;

//Updates sort for range automatically
function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 2;
  var tableRange = "A3:T99"; //range to be sorted

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}

但问题是,通过这样做,现在已禁用在工作表2中按日期自动排序的其他脚本。

我还尝试在每个工作表中创建一个名称范围,并将NamedRange1和NameRange2放在脚本的表范围部分中。它没有改变任何东西。工作表1仍然按姓氏排序,而工作表2没有排序。

//Updates sort for range automatically
function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 2;
  var tableRange = "NamedRange1"; //range to be sorted

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}

2 个答案:

答案 0 :(得分:0)

尝试:

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:T99"; //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:T99"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
     var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }
  else{return}
}}

测试电子表格:

 https://docs.google.com/spreadsheets/d/13vveA0n4w84yQ71no7LgGonz_wLE7H_RA1ocDOtLZPQ/edit?usp=sharing

答案 1 :(得分:0)

我建议改用getSheetByName方法:

例如:

 var ss = SpreadsheetApp.getActiveSheet().getSheetByName('Deals in Escrow');