如何有效地输出到 Google Apps 脚本 (GAS) 中的非连续范围

问题描述 投票:0回答:2

我是 Google 脚本新手,非常感谢您的帮助!

这是我的数据的样子(3 个不连续的记录,4 个不连续的字段): https://docs.google.com/spreadsheets/d/18FFB2HlcfcciHj7NPmihZbuf47op2UMdRTKfpyTqowU/edit#gid=0

我有一个项目数组,每个项目都是一个包含 4 个键的对象。我想以尽可能少的 SetValue 请求输出到 Google Sheets。如果我不能在 1 次调用中完成它,那么一次输出每个项目是最合乎逻辑的。

我的想法是我可以为字段 1 和 4 创建跨越整个列的范围。然后我可以创建跨越整个项目行的范围。一旦我组装了一个包含 2 个值的数组,那么这 2 个值之间的交集就是我想要输出的范围。

或者也许因为假设我知道下面每个单元格的行/列,我可以返回范围并使用范围的 UNION 来创建映射。

但是GAS中有没有做交集或并集的函数呢?或者我最好只输出每个单元格 1 by 1?

感谢您的帮助!

google-apps-script
2个回答
3
投票

没有这个功能。它要么是一个接一个的,要么是连续的单元格。

但是有很多技巧/替代方案可能对您有用。正如桑迪在评论中指出的那样,您可以获得包含所有必需单元格的连续范围,并将非必需单元格设置为空白或其原始值。这有一个缺点,即不适用于公式。

您还可以使用“指向”连续范围的简单公式预先配置所需的单元格。这将简单地立即批量更新。

如果确实需要批量设置,您还可以获取大范围的所有值公式,并将所有普通值转换为其等效公式,例如

abc
变成
="abc"
1/1/2015
=DATE(2015,1,1)
(是的,很麻烦),然后使用 setFormulas 将所有内容设置回来,包括原始公式和转换为公式的值。在您不想更改的单元格中不进行任何实际内容更改,并更改所需的内容,所有这些都在一次批量操作中完成。

无论如何,这些只是解决方法。正如第一句话所述,这是不可能的。您可能想在 Apps 脚本问题跟踪器中为此报告加注星标,以便为此功能投票并接收更新。


0
投票

这是一个老问题,但今天,有一个更优雅的解决方案,使用

RangeList

您可以选择

Range
列表,将这些
Range
添加到
RangeList
,然后对其执行单个操作。

此示例演示了如何在单个操作中对单元格

D4
E6
应用更改,即使单元格不连续也是如此。

var rangeList = SpreadsheetApp.getActive().getRangeList(['D4', 'E6']);
rangeList.setBackgroundColor('blue')

您可以在

文档
中找到有关 RangeList 类的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.