Как я могу увеличить ячейку, на которую ссылается скрипт, каждый раз, когда я запускаю его? - PullRequest
0 голосов
/ 09 февраля 2019

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

function dataTransfer() {
   var value1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('BACKLOG').getRange('G18').getValue();
   var value2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('BACKLOG').getRange('AF8').getValue();
   var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AM COMP');
   var cell1 = sheet2.getRange('D8');
   var cell2 = sheet2.getRange('D18');
   cell1.setValue(value1);
   cell2.setValue(value2);

}

Этот код считывает ячейки для данных и копирует эти данные на другой лист, когда янажмите кнопку, которую я создал.Мне нужно, чтобы ячейки, из которых я получаю данные и помещаю их в данные (некоторые с шагом в 2 строки, некоторые на 1) при каждом запуске сценария.

Например:в январе я нажимаю кнопку, и значение в G18 (BACKLOG) копируется в D8 (AM COMP), значение в AF8 (BACKLOG) копируется в D18 (AM UPSELL).Но в феврале я хотел бы нажать кнопку еще раз, но на этот раз значение из I18 (BACKLOG) скопировано в E8 (AM COMP), AF8 (BACKLOG) остается прежним, но копируется в E18 (AM COMP).В марте им нужно будет снова двигаться и т. Д.

Как лучше всего это сделать?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Ежемесячные передачи данных

Все ваши настройки для каждого месяца аккуратно спрятаны на листе с именем «ДАННЫЕ».

function dataTransfer() {
  var ss=SpreadsheetApp.getActive();
  var dataSh=ss.getSheetByName('DATA');
  var m=new Date().getMonth()+1;//The + 1 is to get past the header row
  var values=dataSh.getRange(1,1,dataSh.getLastRow(),dataSh.getLastColumn()).getValues();
  var hdrA=values[0];
  var valA=values[m];
  var vObj={};
  for(var i=0;i<valA.length;i++){
    vObj[hdrA[i]]=valA[i];//the hdrA is the key and the valA is the value
  }
  ss.getSheetByName(vObj.SH).getRange(vObj.RG1).setValue(ss.getSheetByName(vObj.valSH1).getRange(vObj.valRG1).getValue());
  ss.getSheetByName(vObj.SH).getRange(vObj.RG2).setValue(ss.getSheetByName(vObj.valSH2).getRange(vObj.valRG2).getValue());
  Logger.log('SH: %s,RG1: %s,valSH1: %s,valRG1: %s,RG2:%s,valSH2: %s,valRG2: %s,MONTH: %s',vObj.SH,vObj.RG1,vObj.valSH1,vObj.valRG1,vObj.RG2,vObj.valSH2,vObj.valRG2,vObj.MONTH);
}

Так выглядит лист «ДАННЫЕ»:

enter image description here

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

0 голосов
/ 09 февраля 2019

Возможно, это не полное решение, но оно должно дать вам представление о том, что необходимо сделать.Вам нужно заполнить значения для оставшихся месяцев в литерале объекта.

function dataTransfer() {
  var addr_2_ToGet,cellAddressToGet,cellAddressToSet,
      currentMonthNumber,d,innerObj,objectMap,sourceSheet,ss;

  d = new Date();//Get the current date

  currentMonthNumber = d.getMonth();//Get a number which represents 
    //the current month - 0 = January
  Logger.log('currentMonthNumber: ' + currentMonthNumber)

  objectMap = {
    0:{cellToGet:'G18',cellTwoToGet:'',cellToSet:'D8',cellTwoToSet:''},
    1:{cellToGet:'I18',cellToSet:'E8'},
    2:{cellToGet:'',cellToSet:''},
    3:{cellToGet:'',cellToSet:''},
    4:{cellToGet:'',cellToSet:''},
    5:{cellToGet:'',cellToSet:''},
    6:{cellToGet:'',cellToSet:''},
    7:{cellToGet:'',cellToSet:''},
    8:{cellToGet:'',cellToSet:''},
    9:{cellToGet:'',cellToSet:''},
    10:{cellToGet:'',cellToSet:''},
    11:{cellToGet:'',cellToSet:''}    
  }

  innerObj = objectMap[currentMonthNumber]
  Logger.log('innerObj: ' + innerObj)

  cellAddressToGet = innerObj.cellToGet;
  Logger.log('cellAddressToGet: ' + cellAddressToGet)
  addr_2_ToGet = innerObj.cellTwoToGet;

  cellAddressToSet = innerObj.cellToSet;
  Logger.log('cellAddressToSet: ' + cellAddressToSet)

  addr_2_To_Set = innerObj.cellTwoToSet;
  Logger.log('addr_2_To_Set: ' + addr_2_To_Set)

  ss = SpreadsheetApp.getActiveSpreadsheet();
  sourceSheet = ss.getSheetByName('BACKLOG');

  var value1 = sourceSheet.getRange(cellAddressToGet).getValue();
  var value2 = sourceSheet.getRange(addr_2_ToGet).getValue();

  var sheet2 = ss.getSheetByName('AM COMP');

  var cell1 = sheet2.getRange(cellAddressToSet);
  var cell2 = sheet2.getRange(addr_2_To_Set );

  cell1.setValue(value1);
  cell2.setValue(value2);

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