根据单元格的值复制并粘贴一行

Copy and paste a row based on a cell's value

我有这个sheet:https://puu.sh/ISskB/7329c743ce.png

基本上我想要的只是将包含列 F2:F1000>20% 的所有行复制并粘贴到另一个 sheet 中。我计划将此脚本安排为每天 运行 一次,因此它不应覆盖前几天粘贴的任何数据。

谢谢

可以是这样的:

function set_trigger() {
  ScriptApp.newTrigger("main").timeBased().everyDays(1).create();
}

function main() {
  copy_all_rows_to_dest_sheet();
  remove_redundant_rows();
}

function copy_all_rows_to_dest_sheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var src_sheet = ss.getSheetByName('Sheet1');
  var src_range = src_sheet.getDataRange();
  var dest_sheet = ss.getSheetByName('Sheet2');
  var dest_range = dest_sheet.getRange(dest_sheet.getLastRow()+1,1);
  src_range.copyTo(dest_range);
}

function remove_redundant_rows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet2');
  var data = sheet.getDataRange().getValues();

  // get indexes of redundant rows
  var rows = data.map(x => x.slice(0,-1).join());
  var indexes = [];
  var i = 0;
  while (rows.length) {
    var row = rows.shift();
    // var percent = data[i].pop();
    var percent = data[i][5];   // <---------------------- update
    if (percent < .2 || rows.includes(row)) indexes.push(i);
    i++;
  }

  // remove the rows by the indexes
  while (indexes.length) sheet.deleteRow(indexes.pop()+1);
}

如果您 运行 函数 set_trigger() 它将每天 运行 函数 main()

函数 main() 复制 sheet 'Sheet1' 中的所有行到 sheet 'Sheet2' 的末尾并删除所有重复的行和最后一列中值小于 20% 的所有行。

更新

这是不保留格式的主要函数的变体(它从目标 sheet 获取所有格式):

function main_no_formatting() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var src_sheet = ss.getSheetByName('Sheet1');
  var src_range = src_sheet.getDataRange();
  var [header, ...src_data] = src_range.getValues();
  
  var dest_sheet = ss.getSheetByName('Sheet2');
  var dest_range = dest_sheet.getDataRange();
  var [_, ...dest_data] = dest_range.getValues();

  var data = [...src_data, ...dest_data];
  var rows = data.map(x => x.join());
  var filtered_data = [];

  for (var i=0; i<data.length; i++) {
    var row = rows.shift();
    var percent = data[i][5];
    if (percent < .2) continue;
    if (rows.includes(row)) continue;
    filtered_data.push(data[i])
  }

  var table = [header, ...filtered_data];
  
  dest_sheet.clear();
  dest_sheet.getRange(1,1,table.length,table[0].length).setValues(table);
}

小心 % 标志。如果它们从目的地消失 sheet,代码将无法使用。

我的 sheet 是 here