Как перенести строку на основе критериев - Google Apps Script - PullRequest
0 голосов
/ 17 апреля 2019

Я настраиваю инструмент, который переносит строки в другую электронную таблицу в зависимости от возраста строки (> = 30 дней).

Я решил удалить строку на основе критериев (> = 30 дней назад), но я не могу понять, как успешно переместить ряд.Я работал над двумя частями кода, которые, похоже, нуждаются только в одной или двух настройках, но я не могу понять, что это за настройки.

Первая:

function CopyDataToNewFile() {
  var ss SpreadsheetApp.openById('ID'); // sss = source spreadsheet
  var sheet = ss.getSheetByName('Sheet1'); // sh = source sheet
  var ass = SpreadsheetApp.openById('ID'); // ass = archive spreadsheet
  var as = ass.getSheetByName('Sheet2'); // as = archive sheet 
  var datarange = sheet.getDataRange(); //Get full range of data source
  var a_datarange = as.getDataRange(); // Get full range of archive
  var lastrow = datarange.getLastRow(); // get last row of data source
  var values = datarange.getValues(); // get all data in a 2D array
  var A1Range = datarange.getA1Notation(); //get A1 notation source
  var monthOld = Date.now() + -30 * 24 * 3600 * 1000; //adds 1 month to today

  for (i = lastrow; i >= 1; i--) {
    var tempDate = values[i - 1][4];
    if ((tempDate != "") && (tempDate <= monthOld)) {

      sheet.getRange(datarange.getRow(), 1, 1, sheet.getLastRow()).moveTo(a_datarange);

    } //closes if
  } //closes for loop
} //closes function

Здесь я получаю сообщение об ошибке: «Целевой диапазон и исходный диапазон должны быть в одной электронной таблице. (Строка 49, файл« Удалить »):

Я считаю, что это означает, что moveTo () не может использоваться здесь, но я не знаю, что использовать вместо этого.

Второй

function MoveOldEntries() {

  var sss = '1kKFvRT4hCclHQRsQ_4Z3wNifGirXczfViCi31Nw_wD0';
  var ass = '1K2xDQEGnFcUcs3u3Cj86z6UsxR35kdRV_awMFFeXKt0';
  var s_sheet1 = SpreadsheetApp.openById(sss).getSheets()[0];
  var a_sheet1 = SpreadsheetApp.openById(ass).getSheets()[0];
  var lr = s_sheet1.getLastRow();

  var rows = s_sheet1.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (i = lr; i >=1; i--) {
    var oldDate = Date.now() + - 90 * 24 * 3600 * 1000;     // or var oldDate =  new Date('values[i][1]')
    var curDate = new Date();
    var tempDate = values[i-1][4]
    if ((tempDate!="") && (tempDate <= (oldDate))) {
      a_sheet1.appendRow([values])
  }
}
}

Это возвращаетправильное количество строк в архивном листе, но это бред:

[Ljava.lang.Object;@1534974f    
[Ljava.lang.Object;@5fd49386    
[Ljava.lang.Object;@199384d5    
[Ljava.lang.Object;@6cd6e3a6    
[Ljava.lang.Object;@152fec74    
[Ljava.lang.Object;@58300fb3    
[Ljava.lang.Object;@1e50f226    

Любые идеи о том, что изменить, приветствуются. Я работаю над этим в течение нескольких дней!

1 Ответ

1 голос
/ 17 апреля 2019

Используйте код ниже.Поскольку вы не можете двигаться, вам нужно получить значения, отфильтровать, а затем установить значения для пункта назначения.

function CopyDataToNewFile() {
  var ss = SpreadsheetApp.openById('ID'); // sss = source spreadsheet
  var sheet = ss.getSheetByName('Sheet1'); // sh = source sheet
  var values = sheet.getDataRange().getValues(); // get all data in a 2D array

  var ass = SpreadsheetApp.openById('ID'); // ass = archive spreadsheet
  var as = ass.getSheetByName('Sheet2'); // as = archive sheet

  var monthOld = Date.now() + (-30 * 24 * 3600 * 1000); //adds 1 month to today
  var results = [];

  values.forEach(function(row) {
    var tempDate = row[4];
    if (tempDate != '' && tempDate <= monthOld) {
      results.push(row);
    }
  });

  // results.unshift(values[0]); // uncomment this if you want the column names from source sheet to copy

  as.getRange(as.getLastRow()+1, 1, results.length, results[0].length).setValues(results);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...