根据条件切到另一个sheet + spreadsheet

Cut based on condition to another sheet + spreadsheet

我需要一些帮助来构建一个应该执行以下操作的简单脚本:

Source spreadsheet

检查 sheet source 上的 Col C 是否等于 "Done"

  1. 如果是,请将符合条件的 Col A 和 Col B 中的行复制并粘贴到 sheet history 上的第一个空行+ 复制粘贴的时间戳

  2. 然后从 spreadsheet Destination 上的 Col A 和 B 复制并粘贴相同的值,选项卡上的第一个空行 destination + 时间戳复制粘贴

  3. 最后从第一个sheet source删除复制的行,所以没有空行

  4. 如果不是,则保留值

总的来说,我们的目标是剪切符合条件的值并将它们同时粘贴到不同的 sheet 和不同的传播sheet。

给你:

function main() {

  // get 'Done' rows from sheet 'source' and remove these rows
  var data = get_done();

  // put the rows on the sheet 'history' (same spreadsheet)
  copy_to_history(data);

  // pyt the rows on the sheet 'destination' (another spreadsheet)
  copy_to_destination(data);
}

function get_done() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('source');
  var data = sh.getDataRange().getValues();

  var keep = data.filter(x => x[2] != 'Done');
  sh.clearContents().getRange(1,1,keep.length,keep[0].length).setValues(keep);

  var timestamp = new Date();
  var done = data.filter(x => x[2] == 'Done').map(x => [timestamp, x[0], x[1]]);
  return done;
}

function copy_to_history(data) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('history');
  data.forEach(row => sh.appendRow(row));
}

function copy_to_destination(data) {
  var ss = SpreadsheetApp.openById('1niihiUXZii1gNnifn2ZLNf4JnvLs887mJMp53OcIphA');
  var sh = ss.getSheetByName('destination');
  data.forEach(row => sh.appendRow(row));
}

该脚本的主要缺点:它不保留公式和格式。