Google apps script 在编辑()上对特定范围进行排序
我正在尝试自动对工作表的某个区域进行排序Google apps script 在编辑()上对特定范围进行排序,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试自动对工作表的某个区域进行排序onEdit,使其顶部为空单元格,底部为最早的条目。 我已从获得此代码,并尝试根据我的需要对其进行修改: function onEdit(e) { var sheet = ss.getActiveSheet(); if( sheet != ss.getSheetByName('cover sheet')) { var editRange = { // B4:J6 top: 29, bottom
onEdit
,使其顶部为空单元格,底部为最早的条目。
我已从获得此代码,并尝试根据我的需要对其进行修改:
function onEdit(e)
{
var sheet = ss.getActiveSheet();
if( sheet != ss.getSheetByName('cover sheet'))
{
var editRange = { // B4:J6
top: 29,
bottom: sheet.getLastRow()+1,
left: 4,
right: 11
};
// Exit if we're out of range
var thisRow = e.range.getRow();
if (thisRow < editRange.top || thisRow > editRange.bottom) return;
var thisCol = e.range.getColumn();
if (thisCol < editRange.left || thisCol > editRange.right) return;
// We're in range; timestamp the edit
var ss = e.range.getSheet();
ss.getRange(editRange).sort({column: 1, ascending: true});
}
}
函数onEdit(e)
{
var sheet=ss.getActiveSheet();
如果(表!=ss.getSheetByName(‘封面页’)
{
var editRange={//B4:J6
排名:29,
底部:sheet.getLastRow()+1,
左:4,,
右:11
};
//如果超出范围,请退出
var thisRow=e.range.getRow();
if(thisRoweditRange.bottom)返回;
var thisCol=e.range.getColumn();
如果(thisColeditRange.right)返回;
//我们在范围内;给编辑加时间戳
var ss=e.range.getSheet();
getRange(editRange).sort({列:1,升序:true});
}
}
但这是行不通的。有什么想法吗?这里是一个链接
对好
您需要的应该是这样的:
function onEdit(e) {
var thisSS = e.source,
editedRow = e.range.getRow(),
editedCol = e.range.getColumn();
if(editedCol === 4){
thisSS.sort(editedCol, false);
}
thisSS.insertRowBefore(2);
}
然后将其粘贴到工作表的脚本中,然后转到“资源>>当前项目的触发器”,并设置触发器以在onEdit事件发生时运行函数“onEdit”
致以最良好的祝愿。好的
您需要的应该是这样的:
function onEdit(e) {
var thisSS = e.source,
editedRow = e.range.getRow(),
editedCol = e.range.getColumn();
if(editedCol === 4){
thisSS.sort(editedCol, false);
}
thisSS.insertRowBefore(2);
}
然后将其粘贴到工作表的脚本中,然后转到“资源>>当前项目的触发器”,并设置触发器以在onEdit事件发生时运行函数“onEdit”
致以最诚挚的问候。请确保您声明的区域中有单元格。正如@SpiderPig在本文中提到的,如果给定范围内没有单元格,则范围将无效 为此,您还可以尝试使用
bottom:sheet.getLastRow()-1
,如下面给出的解决方案所示:
function AutoSortOnEdit() {
var sheetNames = ["testsheet456", "testsheet457", "testsheet458"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
sheetNames.forEach(function(name) {
var sheet = ss.getSheetByName(name);
var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
range.sort({column: 1, ascending: true});
});
}
希望对你有用。快乐编码 请确保您声明的区域中有单元格。正如@SpiderPig在本文中提到的,如果给定范围内没有单元格,则范围将无效 为此,您还可以尝试使用
bottom:sheet.getLastRow()-1
,如下面给出的解决方案所示:
function AutoSortOnEdit() {
var sheetNames = ["testsheet456", "testsheet457", "testsheet458"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
sheetNames.forEach(function(name) {
var sheet = ss.getSheetByName(name);
var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
range.sort({column: 1, ascending: true});
});
}
希望对你有用。快乐编码 那它不起作用呢?你能提供一个例子来说明它做什么和应该做什么吗?如果一张纸不是封面,它应该对一张纸上的特定行进行排序。它什么也不做。我将创建一个示例电子表格,尝试使用一些
Logger.log('some text here:'+variableName)
语句从代码编辑器运行该函数,然后查看日志以查看它打印到日志中的内容。例如将Logger.log('it run!')
放在函数的最顶端,以确定函数是否正在运行。将第一个if
语句更改为:if(sheet.getName()==='cover sheet')
在编辑(e)之后立即执行了记录器{这没有进展,所以我想出于某种原因,脚本不会自动触发。知道为什么吗?脚本绑定到工作表上。它不工作了吗?你能提供一个示例来说明它做什么和应该做什么吗?如果工作表不是封面,它应该对工作表中的特定行进行排序。它什么都不做。我将创建一个s示例电子表格尝试使用一些Logger.log('此处的一些文本:'+variableName)
语句从代码编辑器运行函数,然后查看日志以查看它打印到日志中的内容。例如,PutLogger.log('它已运行!')
位于函数的最顶端,以确定函数是否正在运行。将第一个if
语句更改为:if(sheet.getName()==='cover sheet')
在编辑(e)后立即执行了记录器{这没有进展,所以我想出于某种原因,脚本不会自动触发。知道为什么吗?脚本绑定到工作表。不幸的是,我需要另一种解决方案,而不是插入行,因为在这个区域的左侧是一个不应更改的区域。排序也不应离开框的边界,而是在框内排序框。不幸的是,我需要另一种解决方案,而不是插入行,因为在此区域的左侧是一个不应更改的区域。此外,排序不应离开框的边界,而是在框内进行排序。我有点担心运行时:如果我看到右侧,它总是对该区域中的所有图纸进行排序,即使nge不是在那个区域制作的。从技术上讲,如果编辑是在那个区域,那么只对被编辑的工作表进行排序就足够了,还是我错了?我有点担心运行时间:如果我认为正确,它总是对那个区域的所有工作表进行排序,即使没有在那个区域进行更改。从技术上讲,只对shee进行排序就足够了如果编辑是在那个区域,那它就被编辑了,还是我错了?