скопировать строки на целевой лист, если столбец 5 не пуст - PullRequest
0 голосов
/ 13 июня 2019

Вот код, над которым я работал. Я пробовал много разных комбинаций, и ни одна из них не дает мне желаемых результатов. Не могли бы вы объяснить, почему мой код неверен?

код выполняет итерацию строк, ища строки больше 0 - если это так, скопируйте строку на целевой лист - однако я копирую неправильные строки?

function try2() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var lastrow = sheet2.getLastRow()+1;
  var target = sheet2.getRange(lastrow,1,1,5);
  
  var data = sheet1.getRange('E1:E500').getValues();
  
  for(var i=1; i< data.length; i++) {
    Logger.log(i)
    if (data[i] > 0) {
      Logger.log(data[i])
      
      sheet1.getRange(i, 1, 1, 5).copyTo(target);
    }
  }
  

}
Я обновил код, чтобы иметь переменные lastrow и target в цикле for с по-прежнему нежелательными результатами.
function try2() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  
  
  var data = sheet1.getRange('E1:E500').getValues();
  
  for(var i=1; i< data.length; i++) {
    var lastrow = sheet2.getLastRow()+1;
    var target = sheet2.getRange(lastrow,1,1,5);
    //Logger.log(i)
    if (data[i] !== "") {
      Logger.log(data[i])
      
      sheet1.getRange(i, 1, 1, 5).copyTo(target);
    }
  }
  

}

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Требование:

Копировать данные из одного листа в следующий свободный ряд другого листа.


Решение:

function try2() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var targetLastRow = sheet2.getLastRow() + 1;

  var dataLastRow = sheet1.getLastRow();
  var dataRange = sheet1.getRange(1,5,dataLastRow);
  var data = dataRange.getValues();

  for(var i = 0; i < data.length; i++) {
    if (data[i]) {      
      sheet1.getRange(i+1, 1, 1, 5).copyTo(sheet2.getRange(targetLastRow+i,1));
    }
  }
}

Объяснение:

Этот скрипт будет циклически перебирать все строки в столбце E на первом листе и копировать все, которые не являются пустыми, на ваш лист "Final".Используя dataLastRow, чтобы получить данные.Вы экономите время, определяя заданный диапазон E1:E500, теперь сценарий получит только необходимое количество строк для запуска копии, тогда как до выполнения цикла for 500 раз независимо от того, что.

данные копируются в targetLastRow+i, который является следующей доступной строкой листа "Финал", с увеличением на 1 при каждом завершении цикла.

0 голосов
/ 13 июня 2019

Код, который работал, изменяя @ross code- Спасибо

function try3() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final');
  var targetLastRow = sheet2.getLastRow() + 1;

  var dataLastRow = sheet1.getLastRow();
  var dataRange = sheet1.getRange(1,5,dataLastRow);
  var data = dataRange.getValues();

  for(var i = 0; i < data.length; i++) {
    Logger.log(data[i])
    if (data[i] > 0) { 
     Logger.log(data[i])
      sheet1.getRange(i+1, 1, 1, 5).copyTo(sheet2.getRange(targetLastRow+i,1));
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...