插入新行并仅从下面的行复制数据验证

时间:2019-04-20 18:11:56

标签: google-apps-script google-sheets

创建一个“任务列表”电子表格,每次在第一个非标题行(第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});    
  }
}

1 个答案:

答案 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“}