【问题标题】:Google Apps Script Copy/Paste Filtered DataSetGoogle Apps 脚本复制/粘贴过滤的数据集
【发布时间】:2026-02-17 11:05:01
【问题描述】:

我一直在尝试编写一个脚本,该脚本只需获取过滤后的数据,复制它,然后将其粘贴到另一个工作表中。我似乎没有做任何事情。使用我在网上找到的以下代码,它应该可以工作,但我不断收到错误消息,指出该范围内的行数必须至少为 1。但是,我在 A7:R500 范围内有数据,我是只过滤掉空格和'W'。我的这个想法对吗?

function copyPaste(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getRange('A7:R500').getValues();

  var hiddenValues = ['', 'W'];
  values = values.filter(function(v){
    return hiddenValues.indexOf(v[4]) == 'W';
  });

  sheet.getRange(1,21, values.length, 18).setValues(values);
}

【问题讨论】:

  • indexOf() 返回整数而不是数组的元素。 Reference
  • 所以你可以试试 v[4]=='W'

标签: arrays google-apps-script filter copy-paste


【解决方案1】:

解决方案:

由于您已经在使用过滤器数组,您可以将hiddenValues.indexOf(v[4]) 与 -1 进行比较,以过滤掉空格和“W”。

此外,由于您的目标是将结果粘贴到不同的工作表中,因此您需要同时定义源工作表和目标工作表。创建一个工作表并将其名称插入到下面代码中的new sheet name 标记中。

示例代码:

function copyPaste() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getActiveSheet();
  var sheet2 = ss.getSheetByName('<new sheet name>');
  var values = sheet1.getRange('A7:R500').getValues();
  var hiddenValues = ['', 'W'];
  values = values.filter(function(v){
    return hiddenValues.indexOf(v[4]) == -1;
  });
  sheet2.getRange(1,21, values.length, 18).setValues(values);
}

参考:

indexOf()

【讨论】:

  • 不幸的是,我仍然收到错误消息:“无法读取行 sheet1.getRange('A7:R500').getValues(); 的属性 'getRange' of null;
  • 我编辑了我的答案,因为您的工作表名称似乎不是默认的 Sheet1。此外,还应在代码中输入目标工作表的名称。
  • 不得不改变 indexOf(v[4]) = -1
  • 不得不将 indexOf(v[4]) = -1 更改为 indexOf(v[4]) == -1,但它有效!谢谢!
最近更新 更多