Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 仅将筛选范围复制到其他图纸_Google Apps Script_Filter_Google Sheets - Fatal编程技术网

Google apps script 仅将筛选范围复制到其他图纸

Google apps script 仅将筛选范围复制到其他图纸,google-apps-script,filter,google-sheets,Google Apps Script,Filter,Google Sheets,大家好,我试着制作脚本来复制过滤后的数据,但没有成功 我想将过滤后的数据自动复制到另一个工作表 function RejectSave() { var ss = SpreadsheetApp.getActive(); var DataSheet = ss.getSheetByName('Import') ss.setActiveSheet(DataSheet, true); var sheet = ss.getActiveSheet(); sheet.getRange(1

大家好,我试着制作脚本来复制过滤后的数据,但没有成功

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

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 sheet
getFilter()
。例如,以下函数过滤源范围A1:C10,不包括列C中具有特殊值的行。因此,它在起始单元格E1处设置新的(过滤的)数据数组(另请参见图)

JS过滤是灵活且相当快速的


可能的重复请注意,您的代码非常不必要地使用了
setActiveSheet
getActiveSheet
。此答案显示了如何通过
Range.copyTo
方法更自然地实现这一点。
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);
}