自动排序不适用于一张 Google 表格中的多张表格

Posted

技术标签:

【中文标题】自动排序不适用于一张 Google 表格中的多张表格【英文标题】:Auto Sort not working on Multiple Sheets within one Google Sheet 【发布时间】:2016-12-23 15:03:47 【问题描述】:

我希望表 2(标题为“托管交易”)按日期自动排序,表 1(标题为“贷款查询”)按姓氏自动排序。两张表格都在一个 Google 表格中。我找到了以下脚本,并对其进行了一些修改,它在工作表 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  );
  

【问题讨论】:

您应该为每个函数使用 getSheetByName 那不是 getActiveSheet 吗? 对不起,它在 getActiveSheet 作为附加方法之后出现,例如getActiveSheet().getSheetByName - 我在飞机上大声笑,所以一旦我们达到 wifi 海拔高度,我就可以看看 :) 【参考方案1】:

试试:

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  );
  
  elsereturn

测试电子表格:

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

【讨论】:

运行该代码时收到此错误消息; TypeError:无法从未定义中读取属性“源”。 (第 3 行,文件“按姓氏排序”) 我注意到您的测试电子表格没有按日期自动排序 已修复。对此感到抱歉。 好的,它在两个表格上都可以工作,但是当我使用你的代码时,我得到了上面的错误 我删除了我的第二个自动排序代码,并将我的第一个脚本从测试电子表格中更改为你的。它请求权限,我给了它,然后我收到了这条消息; TypeError:无法从未定义中读取属性“源”。 (第 3 行,文件“代码”)【参考方案2】:

我建议改用getSheetByName 方法:

例如:

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

【讨论】:

我运行它,我得到以下信息: TypeError: Cannot find function getActiveSheet in object Sheet。 (第 4 行,文件“按姓氏排序”)

以上是关于自动排序不适用于一张 Google 表格中的多张表格的主要内容,如果未能解决你的问题,请参考以下文章

条件格式不适用于 Google 表格中的“countif”功能

如何在同一电子表格中获取已发布的Google工作表的不同网址

将多张 Excel 表格中的数据合并到一张表中

sql2000定时自动备份数据库中的某一张表或多张表

表格排序不适用于 ie9、firefox 中的日期

mysql多张表合并一张表