Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 当数字小于x时,刷新Google工作表中的过滤器OneEdit()_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 当数字小于x时,刷新Google工作表中的过滤器OneEdit()

Google apps script 当数字小于x时,刷新Google工作表中的过滤器OneEdit(),google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一张表,我们用作现金日志,每天更新 我想限制输入数据的人可以看到的行数。为此,我添加了一列(#在本例中为12/L),将数字1应用于每一个新行数据,并依次增加现有行 我对L列应用了一个筛选器,该筛选器将查看限制为小于或等于5的行。这就完成了我想要的,但是当添加新行时,我必须单击Filter/Ok来更新视图 有没有办法创建一个OneEdit脚本来监视L列的更改,并在发生更改时重新应用筛选器?我相信您的当前情况和目标如下 电子表格在“L”列有基本过滤器 更新列“L”的值时,您希望刷新筛选器。为此

我有一张表,我们用作现金日志,每天更新

我想限制输入数据的人可以看到的行数。为此,我添加了一列(#在本例中为12/L),将数字1应用于每一个新行数据,并依次增加现有行

我对L列应用了一个筛选器,该筛选器将查看限制为小于或等于5的行。这就完成了我想要的,但是当添加新行时,我必须单击Filter/Ok来更新视图


有没有办法创建一个OneEdit脚本来监视L列的更改,并在发生更改时重新应用筛选器?

我相信您的当前情况和目标如下

  • 电子表格在“L”列有基本过滤器
  • 更新列“L”的值时,您希望刷新筛选器。为此,您要使用OnEdit触发器。-这是您提出的问题
    是否有办法创建一个onEdit脚本来监视列L的更改,并在发生更改时重新应用筛选器?
在这种情况下,如何复制列“L”的现有基本筛选器并将其删除,然后再次创建复制的筛选器?我认为通过这种流动,你的目标可能会实现。当这个流程反映到GoogleApps脚本中时,它变成如下所示

示例脚本: 请将以下脚本复制并粘贴到Google电子表格的脚本编辑器中。并且,当您想要运行此脚本时,请手动编辑“Sheet1”工作表上“L”列的单元格。。这样,脚本就可以运行了。脚本复制列“L”的现有基本筛选器并将其删除,然后将其创建为新筛选器。这样,可以将过滤器反映到新值

function onEdit(e) {
  const sheetName = "Sheet1"; // Please set the sheet name.
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() != sheetName || range.columnStart != 12) return;
  const filter = sheet.getFilter();
  const fRange = filter.getRange();
  const criterion = filter.getColumnFilterCriteria(12).copy();
  filter.remove();
  fRange.createFilter().setColumnFilterCriteria(12, criterion);
}
注:
  • 此脚本由OnEdit触发器运行。因此,当您使用脚本编辑器直接运行脚本时,会发生错误。请小心这个
  • 当“L”列的单元格被脚本更新时,在这种情况下,我建议在脚本中包含上述方法。因为当通过脚本更新单元格时,不会触发OnEdit触发器
参考资料:
补充: 从你下面的答复中,


非常感谢您的回复。我肯定会把这个存档,以备将来使用。我确实意识到我对单词过滤器的使用有点快和松。我需要刷新过滤器视图,而不是根据公式创建的过滤器,即通过选择漏斗并按条件设置过滤器创建的过滤器视图。。。我在这里看到的一个例子是:(docs.google.com/spreadsheets/d/…)在A列中输入任何内容后,#5(在L列中)以上的内容基本上都不可见

我知道您希望在编辑列“A”时刷新列“L”的基本筛选器。根据您的问题,我认为您希望在编辑列“L”时刷新列“L”的基本筛选器。但我明白我的理解是不正确的

当编辑列“A”时,如果要刷新列“L”的基本筛选器,那么下面的示例脚本如何

function onEdit(e) {
  const sheetName = "Sheet1"; // Please set the sheet name.
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() != sheetName || range.columnStart != 1) return;
  const filter = sheet.getFilter();
  const fRange = filter.getRange();
  const criterion = filter.getColumnFilterCriteria(12).copy();
  filter.remove();
  fRange.createFilter().setColumnFilterCriteria(12, criterion);
}

非常感谢您的回复。我肯定会把这个存档,以备将来使用。我确实意识到我对单词过滤器的使用有点快和松。我需要刷新过滤器视图,而不是根据公式创建的过滤器,即通过选择漏斗并按条件设置过滤器创建的过滤器视图。。。这里可以看到我的一个例子:()在A栏输入任何内容后,基本上看不到#5(在L栏)上方的任何内容。@Robert谢谢你的回答。给您带来不便,我深表歉意。从您的回复中,我了解到您希望在编辑列“A”时刷新列“L”的基本筛选器。根据您的问题,我认为您希望在编辑列“L”时刷新列“L”的基本筛选器。但我明白我的理解是不正确的。我为我糟糕的英语水平道歉。为此,我又添加了一个示例脚本。你能确认一下吗?如果这不是你期望的结果,我再次道歉。太棒了!这很好用。感谢您的关注和全面的回复。@Robert感谢您的回复和再次测试。我很高兴你的问题解决了。也谢谢你。