自动排序不适用于一张 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”功能