【问题标题】:Google Sheets Script getNextDataCell() behaves differently in columns where FILTER or UNIQUE formulas are usedGoogle 表格脚本 getNextDataCell() 在使用 FILTER 或 UNIQUE 公式的列中表现不同
【发布时间】:2020-07-15 16:11:25
【问题描述】:

我不敢相信这没有被提出,但我已经查看了大约 30 个问题,但没有一个提到这个特定场景。

背景故事

网页上有一个随时间增长的数据集。我试图在用户可以在其他列中添加信息的工作表中维护此数据的持久副本。我有一个脚本,用户在浏览器控制台中运行以抓取整个数据集。 (我每次都做整套,因为它使新用户和重复用户的流程统一,并且因为我无法合并现有数据作为停止点/过滤器)然后将抓取的数据粘贴到输入区域我的电子表格将由应用脚本处理。

导入过程旨在从输入中过滤掉现有数据,并将新的唯一数据附加到现有数据的末尾。这允许用户添加的附加信息不受干扰。

我的方法

我正在尽量减少此工作表上的脚本工作量,并依靠公式来完成尽可能多的繁重工作。为此,我决定使用 FILTER() 公式从输入中删除重复数据。我讨厌它,但我还没有找到另一个同样有效的解决方案。

工作表中有一个中间区域保存此公式的输出。因此,用户将数据粘贴到输入范围 > FILTER() 公式动态构建新数据范围 > 脚本旨在将此数据复制到现有数据的末尾。

问题

在 UI 中,Ctrl + Down 快捷键按预期工作,并将光标移动到 FILTER() 输出中数据的末尾。录制宏时,它会按照我的预期创建一个带有getNextDataCell(SpreadsheetApp.Direction.DOWN).activate(); 调用的脚本。问题是执行此脚本会导致光标一直移动到 FILTER() 公式扩展其影响的地方。

幻影数据只能被脚本检测到。我可以从这个范围复制粘贴空白行,它们在所有用户输入的目标中充当空白,但脚本也会检测新位置中的幻像数据。正如标题所示,这也适用于 UNIQUE() 公式,我假设 QUERY 和任何其他从单个单元格生成数据范围的公式。

我可以接受这些单元格的存在,让它们全部复制,然后对我的各种范围进行排序以将所有数据放在一起,但这会带来另一个问题。复制所有这些空白行会导致我的工作表中的行数迅速增加。并且随着所有复制的发生,空白单元格将在某些范围内复合,导致在几次导入中将数以万计的新行添加到工作表中。

真正的问题

有没有办法让 getNextDataCell() 忽略 FILTER 和 QUERY 等公式中的空白行?

编辑说明:我已经删除了次要问题,只专注于让 App Script 忽略空白单元格,因为显然人们认为这太宽泛了。

【问题讨论】:

  • 一次只关注一个问题
  • 欢迎来到 StackOverFlow,请借此机会参加 tour 并学习如何使用 How to Ask、format code、minimal reproducible example 和 Tag Info
  • @Cooper 我绝对不是 SO 新手。提出的问题都是紧密耦合的,分成 3 个问题没有多大意义。如果我这样做,我会受到 X Y 问题投诉的打击。

标签: google-apps-script google-sheets


【解决方案1】:

金牌产品专家已在Google Support community 上提供了此问题的解决方案。 App Script 行为与 UI 之间的脱节是意料之中的,他们将通知产品团队。

这个问题有点像 X/Y 问题。您无法更改 getNextDataCell 函数的行为,但您可以通过向 FILTER 公式添加其他条件来使其不吐出空白单元格。

对于名为 range 的单个列,它将是:

=FILTER(InputRange, LEN(InputRange), <whatever other criteria you have>)

对于多列命名范围,它将是:

=FILTER(InputRange, LEN(INDEX(InputRange,,<column index to check for content>)), <other filter criteria>)

您无法使用 UNIQUE 公式完成此技巧,但您可以简单地通过具有 LEN 标准的 FILTER 公式发送该数据以消除空白。

现在对我来说很明显,但是 LEN 的 0 结果与 FALSE 相同,并导致该行被跳过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2019-11-03
    • 2018-07-10
    相关资源
    最近更新 更多