谷歌应用程序脚本设置单元格公式需要通过追加行添加的行号

Posted

技术标签:

【中文标题】谷歌应用程序脚本设置单元格公式需要通过追加行添加的行号【英文标题】:Google apps scripts set cell formulas needing row number for a row added via appendrow 【发布时间】:2017-12-29 16:17:19 【问题描述】:

我有一个通过谷歌表单填充活动的谷歌表格。其中一个字段是活动日期字段。完成后,活动将通过 appendrow 移动到另一个工作表以进行报告。

var cells = [activityDate, title, completionDate, ...];
destsheet.appendRow (cells);

为了帮助填充数据透视表,目标电子表格中的一列是用于分组目的的活动月份,这是通过以下公式 =Text(A1, "MMMM") 完成的。我遇到的问题是要完全填充“行”,我需要知道添加到目标工作表的行的行号。例如,假设我追加了第 89 行,那么我可以将该行的公式设置为 =Text(A89, "MMMM")。我遇到的问题是,虽然 appendRow 是原子的,但它返回工作表,而不是添加的行。

虽然我可以在 appendRow 之后通过 getRange 获取该行,但我想其他用户可能会在 appendRow 和 getRange 调用之间插入一行。我通过将列的公式更改为“=Text(Indirect(Address(Row(), 1, 4)), “MMMM”) 解决了我的问题。这为我提供了用于报告目的的活动日期格式正确的月份。对于不太精通电子表格的人,我用于解决方案的公式有点令人困惑。

有没有办法可以在原子事务中获取 appendRow,以便我可以正确配置行中可能与“行”数相关的单元格?

【问题讨论】:

使用Lock Service 【参考方案1】:

这个怎么样?删除目标工作表中的所有空行,然后在追加行函数中在追加行的同一事务中调用 getMaxRows() 方法。 Google appscript 是同步的,因此无法在获取最大行信息的那一刻插入另一行。

function appendRow() 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');
  var row = sheet.appendRow(['Some data'])
  Logger.log(row.getMaxRows())

【讨论】:

> 无法在获取最大行信息的那一刻插入另一行 不幸的是,这不是真的。无论如何解决方案都足够好使用 我一直很忙,没有时间研究替代方案。我的报告表没有任何多余的行,因此 getMaxRows() 将返回我刚刚附加的行。我不熟悉的是 Google 如何处理多用户访问。我在同一个电子表格中有多个人。我正在考虑做类似上述的事情。我担心用户“A”会追加一行,然后用户“B”会在为用户“A”调用 getMaxRows() 之前追加一行。 认为您提到的边缘情况在技术上是可行的。因此,我是否可以建议一个解决方案是拥有一个唯一的键列。我的意思是当用户添加一行时,会生成一个唯一的索引键。密钥可以由他们的用户名 + 已经在工作表上的密钥的增量组成。在不太可能的情况下,另一个用户在通话之间排了一行,他们仍然有一个唯一的 ID,因为它包括他们唯一的用户名和一个数字。然后任何后续调用都会查找唯一 ID。

以上是关于谷歌应用程序脚本设置单元格公式需要通过追加行添加的行号的主要内容,如果未能解决你的问题,请参考以下文章

将公式应用于单元格下拉列表的脚本

用于检查工作表列值的 Google 脚本

在谷歌表格中提取特定单元格的公式

请问怎么设置Excel单元格底色,要每一行用不同的颜色区分开来

在非手动更改/编辑单元格时触发脚本 - 谷歌脚本

wps 如何通过公式条件引用数据?