当前位置: 首页 > 知识库问答 >
问题:

自动排序不能在一个Google工作表中的多个工作表上工作

尚声
2023-03-14

我希望表2(标题为“托管交易”)按日期自动排序,表1(标题为“贷款查询”)按姓氏自动排序。两张表都在一张谷歌表中。我已经找到了下面的脚本,我对它进行了轻微的修改,它在第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中自动按日期排序的另一个脚本现在已被禁用。

我还尝试在每个工作表中创建一个Name Range,并将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个答案

皇甫喜
2023-03-14

我建议改用getSheetByName方法:

例如:

 var ss = SpreadsheetApp.getActiveSheet().getSheetByName('Deals in Escrow');
壤驷阳冰
2023-03-14

尝试:

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
 类似资料:
  • 我有一个多标签谷歌表。第一个是主表,我有一些基本的位置信息。在其他页面中,我通过“导入”传输这些基本信息,因此我有一些列动态更改,一些是静态的,用户可以更新。尽管如此,如果我在主工作表的数据之间添加一行,它只会更改动态列(从importrange更新),而其余列不会更改-这会影响更新。在主工作表中添加行时,是否有任何方法/脚本可以自动在其他工作表中添加行?

  • 我有一个Excel工作簿,其中包含36个不同的工作表,我每两周收到一次,工作表在所有标签上都有共同的标题,并且每个标签上都有不同的唯一标题,但每条记录都有一个唯一的ID,可以有多个记录。 我要做的是从所有的工作表中提取唯一的id,然后将每个工作表中的数据提取到一个工作表中,其中包含所有的公共标题和唯一标题。 我正在考虑使用下面帖子中的代码将其导入Access。连接表并将其导出回Excel中的一个工

  • 我不是100%确定是正确的公式,但我尝试的是: 我想修改上面的公式来做以下事情。我有一个多标签谷歌表。只有一个选项卡将所有数据存储为元数据,以填充其他6个选项卡。我将元数据拆分为6个选项卡,但希望避免重复选项卡中的数据。因此,我想创建一个列,显示数据当前的位置(如果已经放置)。以下是一个例子: 主表有以下数据: 将有4个标签,我有相同的列(姓名,电话,地址,电子邮件)。我将把主控表中的数据拆分为这

  • 所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克

  • 我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。 目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入: 但这样,我就失去了单元格样式和文本格式 有没有办法用保留样式?

  • 我有30张单独的工作表,需要合并成一张有多个选项卡的工作表。我可以使用下面的脚本来完成这项工作,但每次都会创建一个新的工作表。当30张单独的工作表中的一张或全部更新时,我只希望这个脚本更新或重写以前创建的“主工作表”。 我正在寻找一个表,其中包含从每个地区的标签。这将允许我与单独更新的所有信息共享一个主控表。