Как увеличить i до следующего звонка? - PullRequest
0 голосов
/ 25 марта 2019

При каждом запуске функции celltest () я хочу увеличить значение i

function cell_test () {
   var i=8 ;
   var ss = SpreadsheetApp.getActiveSpreadsheet ();
   var source = ss.getRange ("A!C1");
   var destSheet = ss.getSheetByName("B");
   var destRange = destSheet.getRange(i,2);
   source.copyTo (destRange, {contentsOnly: true});


}

Этот код работает следующим образом ...

Когда он вызывает cell_test (), он копирует значение изA! C1 и вставьте его в ячейку листа B (8.2) (i = 8).

При следующем вызове я хочу увеличить значение i на +1 и вставить его в (9.2) положение ячейки (i =9).

Как увеличить i-значения каждый cell_test ()?

Пожалуйста, помогите мне.Спасибо

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

Я не знаю, нужно ли мне сбросить или как выполняется cell_test, но это будет увеличивать i при каждом запуске функции.

function cell_test() {
  try {
    // Increment i
    var props = PropertiesService.getScriptProperties();
    var i = props.getProperty("Test");
    if( i === null ) {
      i = 8;
    }
    else {
      i++;
    }
    props.setProperty("Test", i);
    // Put your code here
    var ss = SpreadsheetApp.getActiveSpreadsheet ();
    var source = ss.getRange ("A!C1");
    var destSheet = ss.getSheetByName("B");
    var destRange = destSheet.getRange(i,2);
    source.copyTo (destRange, {contentsOnly: true});
  }
  catch(err) {
    Logger.log(err);
  }
}
0 голосов
/ 25 марта 2019

Хранение и приращение переменной в Сервисе свойств

Попробуйте:

function initI() {
  PropertiesService.getScriptProperties().setProperty('i',8);
  return Number(PropertiesService.getScriptProperties().getProperty('i'));
}

function incrI() {
  var ps=PropertiesService.getScriptProperties();
  var i=Number(ps.getProperty('i'));
  ps.setProperty('i',i+1);
}

function getI() {
  var ps=PropertiesService.getScriptProperties();
  var pObj=ps.getProperties(); 
  if(pObj.hasOwnProperty('i')) {
     var i=Number(ps.getProperty('i'));
    return i;
  }else{
    return initI();
  }
}

function cell_test() {
  var i=getI();
  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var source = ss.getRange ("A!C1");
  var destSheet = ss.getSheetByName("B");
  var destRange = destSheet.getRange(i,2);
  source.copyTo (destRange, {contentsOnly: true});
  incrI();
}

Это удобно, потому что все, что вам нужно сделать, это добавить var i=getI(); в начале любой тестовой функции и на incrI(); в конце вашей тестовой функции, а все остальное позаботится.Если ваш I не определен в службе собственности, getI () позаботится об этом за вас.Если вы хотите начать все сначала, вы можете просто запустить initI (), и для этого будет установлено значение по умолчанию, равное 8. Если вы хотите изменить значение по умолчанию, просто измените 8 в initI () и все готово.Вы можете полностью удалить значение PropertiesService для in в диалоговом окне Files / Project Properties / Script Properties.

0 голосов
/ 25 марта 2019

Вы можете сделать i параметром функции и вызвать функцию из цикла for:

function main() {
  var startRow = 8;
  var endRow = 10;

  for(var i=startRow; i<=endRow; i++) {
    cell_test(i);
  }
}

function cell_test(i) {
   var ss = SpreadsheetApp.getActiveSpreadsheet ();
   var source = ss.getRange ("A!C1");
   var destSheet = ss.getSheetByName("B");
   var destRange = destSheet.getRange(i,2);
   source.copyTo (destRange, {contentsOnly: true});
}

Это скопирует содержимое ячейки A!C1 в ячейку B!B8, B!B9 и B!B10.

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