【问题标题】:Copy only filtered range to other sheet仅将过滤后的范围复制到其他工作表
【发布时间】:2019-07-15 01:30:56
【问题描述】:

大家好,我尝试制作用于复制过滤数据的脚本,但没有成功。

我想将过滤后的数据自动复制到另一个工作表

function RejectSave() {
  var ss = SpreadsheetApp.getActive();
  var DataSheet = ss.getSheetByName('Import')

  ss.setActiveSheet(DataSheet, true);
  var sheet = ss.getActiveSheet();

  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).createFilter();

  var criteria = SpreadsheetApp.newFilterCriteria()
    .setHiddenValues(['', 'A', 'B', 'C'])
    .build();

  ss.getActiveSheet().getFilter().setColumnFilterCriteria(20, criteria);

  var SaveSheet = ss.getSheetByName('RAW')
  ss.setActiveSheet(SaveSheet, true);
  ss.getActiveSheet().insertRowsAfter(ss.getActiveSheet().getMaxRows(), 5);

  var SaveRange = SaveSheet.getRange(SaveSheet.getLastRow()+2, 1)

  DataSheet.getRange(2, 1, DataSheet.getLastRow(), 26)
    .copyTo(SaveRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  DataSheet.getFilter().remove();
};

但是脚本不能只带过滤的数据,它会带该范围内的所有数据,无论是否满足过滤条件。

我想复制刚刚过滤的数据!!

【问题讨论】:

标签: google-apps-script filter google-sheets


【解决方案1】:

如果在编写脚本之前知道过滤条件,那么您可能应该使用 JS array filter() method 而不是 Google 表格 getFilter()。例如,以下函数过滤源范围 A1:C10,不包括 C 列中具有特殊值的行。因此,它在起始单元格 E1 处设置新的(过滤后的)数据数组(另见图片)。

function filtered() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get full (non-filtered) data
  var values = sheet.getRange('A1:C10').getValues();

  // Apply filter criteria here
  var hiddenValues = ['', 'A', 'B', 'C'];
  values = values.filter(function(v) {
    return hiddenValues.indexOf(v[2]) == -1;
  });

  // Set filtered data on the target sheet
  sheet.getRange(1, 5, values.length, 3).setValues(values);
}

JS 过滤灵活且相当快速。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2021-03-14
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多