скопировать и вставить в ячейку переменной с макросом - PullRequest
1 голос
/ 08 мая 2020

Мне нужно скопировать интервал на один лист (скажем, Sheet1! C3: V9) и вставить его на другой лист в переменную позицию, определяемую формулой ADRESS (создание ячейки с нужными мне координатами) , скажем, это ячейка Sheet2! A5. Я попытался использовать сценарий приложения для встраивания функции INDIRECT, но мне не повезло. В следующем коде я хочу заменить случайную ячейку «H13» координатами из ячейки Sheet2! A5 и вставить значения в эту ячейку.

function Macro() {
    var spreadsheet = SpreadsheetApp.getActive();
    spreadsheet.getRange('H13').activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'), true);
    spreadsheet.getRange('C3:V9').activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'), true);
    spreadsheet.getRange('Sheet1!C3:V9').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

Спасибо за помощь!

1 Ответ

0 голосов
/ 18 мая 2020

Как насчет этого решения? Если кто-то отредактирует ячейку A2, чтобы изменить номер недели на текущий, он запустит следующий скрипт, который будет искать номер этой недели в столбце D. Если он его найдет, он скопирует значения из Sheet2!C3:V9 в столбец H в соответствующей строке:

function onEdit(e){

  if (e.range.getA1Notation() == "A2"){ //Only triggers when A2 is edited

    let sprsheet = SpreadsheetApp.getActiveSpreadsheet();
    let sheet1 = sprsheet.getSheetByName("Sheet1");
    let sheet2 = sprsheet.getSheetByName("Sheet2");

    var weekNumbers = sheet1.getRange("D1:D").getValues(); 
    var weekValues = sheet2.getRange("C3:V9").getDisplayValues();

    var currentWeek = e.range.getValue(); //New week number introduced in A2

    for (var i = 0; i < weekNumbers.length; i++){

      if (currentWeek == weekNumbers[i][0]){ //Only true when A2 equals a number in D

        sheet1.getRange(i+1,8,7,20).setValues(weekValues);
        break; //Stops the loop so it doesn't overwrite the following rows        
      }            
    }    
  }  
}

Примечания:

  • onEdit сработает, только если пользователь вручную изменит Простынь. Если ячейка A2 обновляется моим другим скриптом или формулой листа, это не сработает.
  • В первый раз вам нужно будет запустить код из редактора скриптов, чтобы принять разрешения (это может дать ошибка, это ожидаемо). После этого он не потребует дополнительных действий и запустится автоматически.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...