创建一个“任务列表”电子表格,每次在第一个非标题行(第2行)中输入任务时,首先将其分类到其余已输入的任务中,然后将新行添加到下一条目的顶部(第2行)(只要最终结果相同,我就不遵循操作顺序)。
如果需要,这里是电子表格的链接: https://docs.google.com/spreadsheets/d/1clySVeeoq1CBskDiaQywIuHZcr0zrTJIDDc1OPIc0wQ/edit?usp=sharing
我对编写GAS并不熟悉,但是我有点熟悉,可以将代码片段拼凑在一起。
我发现以下几分几乎让我想成为我要去的地方,但我要么获得数据验证,要么获得内容验证,要么都不得到。我想要的只是内容为空的数据验证。
我已经找到并回答了这个问题,但是也许解决方案已经过时,因为它们不适用于我。也许我只是做错了什么。这是我目前所拥有的...
谢谢您的帮助!
特雷
function onEdit(){
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var editedCell = sh.getActiveRange().getColumnIndex();
// Update after "Task" column is edited
if(editedCell == 6) {
sh.getRange("A2:F").sort({column: 2}).sort({column: 3}).sort({column: 1});
var firstRow = 2;
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(1, 1);
newRange = sh.getRange(firstRow, 1, 1, lCol);
var rowBelow = firstRow + 1;
var maxCols = sh.getMaxColumns();
var rangeToCopy = sh.getRange(rowBelow, 1, 1, maxCols);
rangeToCopy.copyTo(sh.getRange(firstRow, 1, 1, maxCols), {validationsOnly:true});
}
}
答案 0 :(得分:1)
我认为这可能更接近您想要的。但是您没有对公式做任何事情,示例中也没有公式,因此很难弄清楚您可能要完成什么。
function onEdit(e){
var sh = e.range.getSheet();
if(e.range.columnStart == 6) {
sh.getRange("A2:I").sort({column: 2}).sort({column: 3}).sort({column: 1});//I extended this range all the way to cover the headers. That may not be what you want.
var range = sh.getRange(2, 1, 1, sh.getLastColumn());
var formulas = range.getFormulas();
sh.insertRowsAfter(1, 1);
newRange = sh.getRange(2, 1, 1, sh.getLastColumn());
var maxCols = sh.getMaxColumns();
var rangeToCopy = sh.getRange(3, 1, 1, maxCols);
rangeToCopy.copyTo(sh.getRange(2, 1, 1, maxCols),SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION,false);
}
}
我没有e.range.columnStart的链接。我看到其他人正在使用,只是做了
Logger.log(JSON.stringify(e));
来亲自查看。我已经使用了很长时间了,因此它一定是那些未记录的功能之一。
这是它的样子:
{“ authMode”:{},“ range”:{“ columnStart”:6,“ rowStart”:2,“ rowEnd”:2,“ columnEnd”:6},“ source”:{},“ user “:{”昵称“:” jimesteban“,”电子邮件“:” email@email.com“},”值“:” 6“}