You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改Google Sheets脚本:仅复制Parks工作表筛选后行至Report

解决Google Apps Script仅复制筛选后可见行的问题

要实现只复制Parks工作表中筛选后的可见行数据到Report表,核心是通过getFilter()判断每行是否被隐藏,再收集可见行数据。以下是修改后的代码及关键说明:

修改后的代码

function copyFilteredParksToReport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const parksSheet = ss.getSheetByName("Parks");
  const reportSheet = ss.getSheetByName("Report");

  // 清空Report表原有内容
  reportSheet.clearContents();

  // 获取Parks表的筛选对象,无筛选则提示并终止
  const filter = parksSheet.getFilter();
  if (!filter) {
    SpreadsheetApp.getUi().alert("Parks工作表未设置筛选");
    return;
  }

  const dataRange = parksSheet.getDataRange();
  const allData = dataRange.getValues();
  const filteredRows = [];

  // 遍历所有行,筛选出可见行(行号从1开始,对应数组索引i+1)
  for (let i = 0; i < allData.length; i++) {
    if (!filter.isRowHiddenByFilter(i + 1)) {
      filteredRows.push(allData[i]);
    }
  }

  // 将筛选后的数据写入Report表
  if (filteredRows.length > 0) {
    reportSheet.getRange(1, 1, filteredRows.length, filteredRows[0].length).setValues(filteredRows);
  }
}

关键逻辑说明

  • 获取筛选对象:通过parksSheet.getFilter()获取当前工作表的筛选实例,先判断是否存在筛选,避免无筛选时出错。
  • 判断可见行:filter.isRowHiddenByFilter(rowNumber)方法接收行号(从1开始),返回该行是否被筛选隐藏,我们只收集返回false的行数据。
  • 数据写入:将收集到的可见行数据批量写入Report表,保证效率。

如果你的原代码有特定列复制、表头处理等额外逻辑,只需对应调整dataRange的范围或循环起始索引即可。

内容的提问来源于stack exchange,提问作者Kimiagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:33:11