Можно ли указать события onEdit, такие как объединение ячеек или удаление содержимого? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть электронная таблица с несколькими листами для проектов.Каждый лист представляет собой более широкую категорию проекта или «ведро».Я хотел бы иметь обзорный лист, который автоматически заполняет имена проектов и сегментов при добавлении нового проекта в список сегментов.Я думаю, что я довольно близок к достижению этого, но мой текущий код добавляется на лист обзора, когда редактирование объединяет ячейки или удаляет содержимое (поэтому пустые проекты добавляются в обзор).Было бы замечательно, если бы имя проекта добавлялось в Overview только тогда, когда ячейка начиналась пусто до редактирования.Было бы идеально, если бы редактирование существующего проекта могло изменить этот проект в Overview (если это можно сделать, это требует больше размышлений, и я могу сделать это позже. Сейчас мне просто нужно игнорировать его, когда событие объединяет или удаляет содержимое).).

Если есть возможность указать разные события, думаю, я мог бы просто добавить больше операторов или условий, чтобы исключить слияние или удаление.Это было бы полезным исправлением.Если возможно связать исходную ячейку и последнюю ячейку для имени проекта, так что редактирование исходной ячейки проекта изменит окончательную ячейку проекта, и наоборот, это было бы удивительно!

Вот мой текущийкод:

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));
}

1 Ответ

0 голосов
/ 14 мая 2019

Попробуйте это:

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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...