Скопируйте значение активной ячейки на другой/неактивный лист – Как определить, какой целевой/целевой лист использовать

Этот сценарий копирует значение активной ячейки на другой лист на основе значения в соседней ячейке.

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

Мне также нужно точно настроить пункт назначения.

Вот:

function copytoTabs() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('Booking In');
    var data = sheet.getActiveCell();
    var value = ss.getSheetByName('Booking In').getActiveCell().getA1Notation();
    var operator = data.offset(0, 1).getValue();

    if (operator == "Michelle") {
        var ts = SpreadsheetApp.getActiveSpreadsheet();
        var tss = ts.getSheetByName('MICHELLE Schedule');
        ts.setActiveSheet(ts.getSheetByName('MICHELLE Schedule'));
        tss.getRange(1, 2).activate();
        tss.getRange(value).copyTo(tss.getActiveRange(),
        SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    }
    else if (operator == "Georgia") {
        ss.setActiveSheet(ss.getSheetByName("GEORGIA Schedule"));
        ss.getCurrentCell().offset(0, 1, 4, 1).activate();
        ss.getRange('\'Booking In\'!P12').copyTo(ss.getActiveRange(),
        SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    }
    else if (operator == "Julie") {
        ss.setActiveSheet(ss.getSheetByName("JULIE Schedule"));
        ss.getCurrentCell().offset(0, 1, 4, 1).activate();
        ss.getRange('\'Booking In\'!P12').copyTo(ss.getActiveRange(),
        SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    }

    ss.setActiveSheet(ss.getSheetByName('Booking In'), true);
}

person Carrie Spooner    schedule 04.08.2018    source источник


Ответы (1)


Вместо использования нескольких блоков if/else вы можете связать имя вкладки листа с именем оператора в объекте. Затем найдите имя вкладки листа по имени оператора.

function copytoTabs() {
  var activeCell,objectOfMappedValues,operator,sheet,sourceSs,targetSheetTabName,trgtSh;

  sourceSs = SpreadsheetApp.getActiveSpreadsheet();

  objectOfMappedValues = {//This is an object literal - the word literal means that the values are
    //hard coded here in the function as opposed to being set with code
    "Michelle":"MICHELLE Schedule",
    "Georgia":"GEORGIA Schedule",
    "Julie":"JULIE Schedule"
  }

  activeCell = sourceSs.getActiveCell();
  Logger.log('activeCell: ' + activeCell)

  operator = activeCell.offset(0, 1).getValue();//Get the value of one cell

  targetSheetTabName = objectOfMappedValues[operator];//Get the sheet tab name for this operator
  Logger.log('targetSheetTabName: ' + targetSheetTabName)

  trgtSh = ts.getSheetByName(targetSheetTabName);//Get the sheet tab to be the target to set a value
  Logger.log('trgtSh.getName(): ' + trgtSh.getName())

  trgtSh.getRange(activeCell.getA1Notation()).copyTo(trgtSh.getActiveRange())

}

Этот код может быть не всем, что вы просите, но, надеюсь, он продвинет вас к окончательному решению.

person Alan Wells    schedule 04.08.2018
comment
Большое спасибо за ответ! Я посмотрю, смогу ли я использовать этот метод, чтобы заставить код работать. Я потратил так много времени на изучение этого и изначально отлично работал с помощью VBA, только чтобы обнаружить, что это совершенно другое, используя сценарии! Я не рассматривал возможность использования вашего подхода, поэтому посмотрю, что у меня получится, и отчитаюсь. - person Carrie Spooner; 05.08.2018