перемещение строк со снятым флажком должно начинаться с определенной строки - PullRequest
1 голос
/ 04 мая 2019

У меня здесь есть скрипт, и теперь мне нужно кое-что настроить. Проблема в том, что когда я запустил скрипт, все строки над 11-й строкой, переходящие из динамического в статический, просто исчезли. Я не могу понять, почему скрипт не читает и не перемещается ниже строки 11.

function moveRows() {
  var sss=SpreadsheetApp.getActive();
  var tss=SpreadsheetApp.openById("Target Spreadsheet Id"); 
  var ssh=sss.getSheetByName('Source Sheet Id');
  var srg=ssh.getDataRange();
  var svA=srg.getValues();
  var tsh=tss.getSheetByName('Target Sheet Id');  
  var oA=[];//output array for rows that meet criteria
  for(var i=svA.length-1;i>12; i--) {
    if (svA[i][21]==true) { //column 22
      oA.push(svA[i].slice()); //this copies the row array
      svA[i][21]=false; //uncheck checkbox    
    }
  }
  tsh.getRange(tsh.getLastRow()+1,1,oA.length,oA[0].length).setValues(oA);//load target sheet with rows with check boxes checked       
  srg.setValues(svA);//save values in source sheet
}

1 Ответ

0 голосов
/ 04 мая 2019

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

function moveRows() {
  var sss=SpreadsheetApp.getActive();
  var tss=SpreadsheetApp.openById("SpreadsheetId"); 
  var ssh=sss.getSheetByName('Sheet1');
  var srg=ssh.getRange(2,22,ssh.getLastRow()-1,1);//just column 22
  var srg1=ssh.getRange(2,1,ssh.getLastRow()-1,ssh.getLastColumn());//all columns for sending data to other spreadsheet.  This wont send formulas
  var svA1=srg1.getValues();
  var svA=srg.getValues();
  var tsh=tss.getSheetByName('Sheet1');  
  var oA=[];//output array for rows that meet criteria
  for(var i=0;i<svA.length; i++) {
    if (svA[i][0]==true) { //column 22
      oA.push(svA1[i].slice());
      svA[i][0]=false;//uncheck checkbox    
    }
  }
  tsh.getRange(tsh.getLastRow()+1,1,oA.length,oA[0].length).setValues(oA);//load target sheet with rows with check boxes checked
  srg.setValues(svA);//save values in source sheet 
}

Так что теперь, какой точный диапазон?что вы хотите зациклить?Какие строки?Какие столбцы?И в каком столбце есть флажки?

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

В этой версии я выполняю только setValues ​​() в столбце, где у меня есть флажки, и я все еще получаю данные на другой лист, так как я использую два массива, один из которых содержит все данные, а другой - простофлажок столбца.Так что это должно решить ваши проблемы с формулами.

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