Google Sheets Script - Ссылка на указанную ячейку c подряд - PullRequest
0 голосов
/ 30 января 2020

У меня есть лист, на котором, когда я меняю указанную ячейку c на «ДА», мне нужно, чтобы лист шаблона был скопирован в новую версию и назван в соответствии со значением ячейки в текущей строке.

Мне не удается решить, как получить значение первой ячейки в выбранной строке. Это то, что я имею до сих пор (я знаю, что это неправильно):

function onEdit() { 


  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var currentCell = sheet.getCurrentCell();  

  if (currentCell = "YES") 
  {
    SpreadsheetApp.getActiveSpreadsheet().toast("New change control sheet added to workbook.","Change Control",15);

  var sourceRow = ss.getActiveRange().getRowIndex();
  var tabName = ss.getRange(cell,1).getValues();

    ss.getSheetByName("CCTemplate").showSheet()
    .activate();
    ss.setActiveSheet(ss.getSheetByName('CCTemplate'), true);
    ss.duplicateActiveSheet();
    ss.setActiveSheet(ss.getSheetByName('CCTemplate'), true);
    ss.getActiveSheet().hideSheet();
    ss.setActiveSheet(ss.getSheetByName('Copy of CCTemplate'), true);
    ss.getActiveSheet().setName("CC" & tabName);
  }
}

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 января 2020
function onEdit(e) { 
  var sh=e.range.getSheet();
  if(sh.getName()=='Your Sheet Name' && e.value=="YES") {
    e.source.toast="New change control sheet added to workbook.","Change Control",15);
    var tabName=sh.getRange(e.range.rowStart,1).getValue();
    var tsh=e.source.getSheetByName('CCTemplate');
    var csh=tsh.copyTo(e.source);
    csh.setName('CC'+tabName);
  }
}

Вы должны избегать использования активации в ваших скриптах, особенно в простых триггерах, где вы должны завершить sh за 30 секунд. Я думаю, что этот код делает то же самое, что вы предназначали для своего кода. Одно существенное отличие состоит в том, что я использую информацию, которая поступает в объект события, который поставляется с триггером. Вы должны добавить код Logger.log (JSON .stringify (e)), а затем просмотреть журналы, и вы увидите, что вам доступно много информации, которая устраняет необходимость запуска дополнительных функций для получения таких вещей, как таблицы.

0 голосов
/ 30 января 2020

Использование объектов событий

onEdit предлагает, среди прочего, объекты событий range и value, которые полезны для получения отредактированного диапазона и его значения.

Также

  • Если вы хотите создать ячейку и сравнить ее со значением, как в if (currentCell = "YES") - вам нужно извлечь ее значение (либо currentCell.getValue(), либо просто event.value). ) и вам нужно использовать == вместо = для сравнения.
  • Будьте осторожны с getValues() против getValue(). Первый дает вам двумерный массив и не требуется, если вы хотите получить значение отдельной ячейки.
  • Нет необходимости устанавливать активный лист для изменения его имени.

Вы можете переписать свой код следующим образом:

function onEdit(event) { 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var currentCell = event.range;  
  var value = event.value;
  if (value == "YES") 
  {
    ...
    var sourceRow = range.getRowIndex();
    var tabName = ss.getRange(sourceRow, 1).getValue();
    ...
    ss.getSheetByName('Copy of CCTemplate').setName("CC" + tabName);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...