首页 > 解决方案 > 是否可以指定 onEdit 事件,例如合并单元格或删除内容?

问题描述

我有一个包含多个项目工作表的电子表格。每个工作表都是一个更广泛的项目类别或“桶”。我想要一个概览表,当新项目添加到存储桶表时,它会自动填写项目和存储桶名称。我认为我非常接近实现这一目标,但是当编辑合并单元格或删除内容时,我当前的代码会添加到概览表中(因此在概览中添加了空白项目)。如果在编辑前单元格开始空白时仅将项目名称添加到概览中,那就太好了。如果编辑现有项目可以在概述中更改该项目,那将是理想的(如果可以这样做,则需要更多考虑,我可以稍后再做。现在,我只需要在事件合并或删除内容时忽略它)。

如果可以指定不同的事件,我想我可以添加更多 if 语句或条件来排除合并或删除。这将是一个可用的修复。如果可以链接项目名称的原始单元格和最终单元格,以便对原始项目单元格的编辑会更改最终项目单元格,反之亦然,那将是惊人的!

这是我当前的代码:

function onEdit(event) {
  var spreadsheet = SpreadsheetApp.getActive();

  var originTab = event.source.getActiveSheet();

  if(originTab.getName() != 'Overview' & originTab.getName() != 'Braindump'){
    var originCell = originTab.getActiveCell();

    if(originCell.getColumn() == 1){
      var projectName = originCell.getValue();
      var bucketName = originTab.getName();

      var finalTab = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Overview'));

      var newRow = finalTab.getLastRow() + 1;

      finalTab.getRange("A" + newRow).setValue(bucketName);
      finalTab.getRange("B" + newRow).setValue(projectName);
    }
  }
}

这段代码在将项目添加到概览表方面做得很好,但是当编辑合并或删除单元格内容时,它也会添加空白项目(仍然具有存储桶名称)。

编辑:我已经做了一个适合我的修复,但如果有人知道更好的方法,我仍然想要一些输入!如果项目名称单元格为空白,我只是将其设置为删除“概述”中的一行。所以最新的代码是:

function onEdit(event) {
  var spreadsheet = SpreadsheetApp.getActive();

  var originTab = event.source.getActiveSheet();
  var originTabName = originTab.getName()

  if(originTabName != 'Overview' & originTabName != 'Braindump'){
    var originCell = originTab.getActiveCell();

    if(originCell.getColumn() == 1){
      var projectName = originCell.getValue();
      var bucketName = originTab.getName();

      var finalTab = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Overview'));

      var newRow = finalTab.getLastRow() + 1;

      finalTab.getRange("A" + newRow).setValue(bucketName);
      finalTab.getRange("B" + newRow).setValue(projectName);

      if(finalTab.getRange("B" + newRow).getValue() == ''){
        finalTab.deleteRow(newRow);
      }
    }
  }
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName(originTabName));
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


尝试这个:

function onEdit(e) {
  var exshts=['Overview','Braindump']
  var sh=e.range.getSheet();
  var name=sh.getName()
  if(exshts.indexOf(name)>-1)return;
  if(e.range.columnStart==1) {
    var projectName=e.value;
    var fT=e.source.getSheetByName('Overview');
    var nrow=fT.getLastColumn() + 1;
    var fR1=fT.getRange(nrow,1);
    fR1.setValue(name);
    var fR2=fT.getRange(nrow,2);
    fR2.setValue(e.value);
    if(e.value=='')fT.deleteRow(nrow);
  }
}

推荐阅读