如何从过滤器中自动选择范围而无需手动输入?

Posted

技术标签:

【中文标题】如何从过滤器中自动选择范围而无需手动输入?【英文标题】:How to auto select range from a filter without having to manually enter it? 【发布时间】:2019-02-12 04:59:47 【问题描述】:

我想知道是否有一种方法可以根据选定的过滤器自动选择单元格范围。

示例:

在(H 列)中设置过滤器 自动选择从 A 列 (A2000) 开始的结果单元格数据:C 列 (C5000) 等。 --- 这就是我卡住的地方。我不知道如何编写以根据所选过滤器自动选择结果单元格数据。

目前,我的锻炼是手动输入单元格,以便继续编写代码。我希望我在上面说得通。

----代码----

function ColHtoActive() 
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Current');  
  var crange = sheet.getRange('A7:I7350').activate();                                
  var currentCell = sheet.setCurrentCell(sheet.getRange('H7'); 
  var hSfilter = sheet.getRange('A7:I7350').createFilter(); 
  var ccC1 = sheet.getRange('H7').activate();
  var cCriteria = SpreadsheetApp.newFilterCriteria().setHiddenValues('Inactive']).build(); 

  sheet.getFilter().setColumnFilterCriteria(8, cCriteria);    


function copycolA() 
  var ss = SpreadsheetApp.getActive().getSheetByName('A');
  ss.getRange('A2307').activate();
  ss.getRange('A2307:A7155').copyTo(
      ss.getActiveRange(),
      SpreadsheetApp.CopyPasteType.PASTE_NORMAL,
      false);

【问题讨论】:

你设置了什么样的过滤器?你想要过滤后的范围吗? 我添加了示例屏幕截图并编辑了代码。我之前粘贴了错误的代码。上面的代码在 H7 被激活并且过滤器设置为“Active”之后,我希望代码能够自动选择范围,而无需手动输入范围。我的下一个功能是将数据复制到基于活动结果范围的另一个选项卡中。我使用“ss.getRange('A2307').activate(); ss.getRange('A2307:C7155').copyTo(ss.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);”有没有办法让代码自动选择“A2307:C7155”而无需手动输入? 如何不手动输入2307和7155这两个数字?在您当前的问题中,我看不出我可以参考什么来获取这些 2307 和 7155。 2307 和 7155 是什么意思?它们是随机数吗?在您提供的图片中,如果我在 H2 选择“Active”,应该选择哪个范围,为什么?如果我在 H242 选择“Active”,应该选择哪个范围,为什么? ('A2307:A7155') 是将过滤器设置为 Active 后范围的结果。对于提供的样本,这将是 (A23:A2288)。我现在注意到的是,当它复制到另一个工作表时,它似乎只是从 A23:A2288 复制和粘贴整个数据(过滤器仅针对活动行设置,但它也包括非活动行)。我想要(或希望)对代码执行的操作是在将 H2 过滤为 Active 后,自动选择结果 A23: A2288 (A23:B2288...或任何范围),然后将值复制/粘贴到另一个选项卡中。 【参考方案1】:

您可以从getFilter().getRange() 获取过滤后的范围维度。这将复制所有过滤后的范围:

function copycolA() 
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Current');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('A');
  var sourceRange = sourceSheet.getFilter().getRange();
  sourceRange.copyTo(
    targetSheet.getRange('A1'),
    SpreadsheetApp.CopyPasteType.PASTE_NORMAL,
    false);

阅读:

Filter#Range Related answer

【讨论】:

谢谢!您的代码完全符合我的要求,只是为了复制过滤范围的结果。 还有一个问题:有没有办法在复制到另一张表时不包含源表中的标题名称? @JMR 您可以在粘贴后只需deleteRow...另外,如果H7 是过滤器标题,只需使用A8:A 获取范围...(不带filter.getRange())只会复制过滤的行(未测试) 感谢您的信息。我只是复制了整个值(根据您上面的代码)并修改了目标工作表代码。数据复制后,我添加了代码来删除我不需要的列。它现在有效。我是新手,学习它对我来说非常令人兴奋。感谢您的时间和帮助! @JMR 也请关注offset

以上是关于如何从过滤器中自动选择范围而无需手动输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ajax 加载过滤后的数据,而无需在 laravel 中重新加载整个页面

无需额外过滤即可返回所有带有预输入的远程匹配项

返回唯一值并避免遍历未过滤的范围

高级过滤器,为1行选择了多个条件

无需手动输入即可自动完成反向地理编码的数据

如何从数据库中获取大量数据并通过输入输入将其显示到下拉列表过滤器中,但只能从数据库中选择