我正在尝试自动对我的工作表onEdit
的某个范围进行排序,其方式是顶部是空单元格,而底部是最旧的条目。
我从here获得了此代码,并尝试根据我的需要对其进行修改:
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});
}
}
但这不起作用。有任何想法吗?以下是sample sheet的链接。
此致
答案 0 :(得分:0)
那么,
你需要的东西应该是这样的:
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);
}
然后将其粘贴到您的工作表脚本中,然后转到&#34;资源&gt;&gt;当前项目的触发器&#34;并设置触发器以运行函数&#34; onEdit&#34;当onEdit事件发生时。
最好的问候。答案 1 :(得分:0)
请确保您声明的范围中有单元格。正如@ SO question中@ 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});
});
}
希望对你有用。快乐的编码!