【问题标题】:Enumerate rows in google sheet枚举谷歌工作表中的行
【发布时间】:2021-07-20 22:19:05
【问题描述】:

我需要枚举谷歌表中的行以用作简单的唯一 ID。当我添加一个新行时,我希望它被分配下一个未使用的数字。问题是我需要能够删除一行,并且没有任何 ID 更改。因此,如果我枚举了第 1 行到第 5 行,并且我删除了第 3 行,我希望得到这样的结果:

DATA   ID
A      1
B      2
D      4
E      5

我可以轻松地创建一个枚举每一行的数字的函数,但我不知道如何使该数字在第一次创建后不可变。另外,如果我要删除最后一行(上面的 ID 5)然后添加另一行,我不知道如何确保新行的 id 是 6 而不是新的 5。谢谢。

【问题讨论】:

  • 这可能需要用脚本来完成
  • 绝对需要一个脚本。当您说“添加另一行”时,这是什么意思? 插入一行?单击底部的小“添加行”按钮?只是将一些数据放在指定的列中?可能意味着很多事情。
  • @mattking,“添加另一行”是指在底部的下一个空行中添加数据。

标签: google-sheets spreadsheet uniqueidentifier enumerate


【解决方案1】:

在我的情况下,我想要的只是确保有唯一的数字,即使添加或减去行或数据也不会重复。所以我只是使用了这个公式。在我的情况下,我只有几百行,但你可以将“1000”增加到任何十的幂,这将大于你的总行数:

=int((now() - DATE(2021, 7, 19)) * 86400) * 1000 + row()

正如@MattKing 所指出的,如果您在此函数之前插入一列,甚至只是重新打开电子表格,这将重新计算。因此,您可以将单元格调整为自引用。它并不是真正的递归,但您必须打开“迭代计算”才能使其工作。前往:

文件 -> 电子表格设置 -> 计算 -> 将“迭代计算”设置为“开启”。然后为了安全起见,您可以将“最大迭代次数”设置为 1,因为这实际上不是递归的。然后使用此单元格公式,但将 VALUE() 函数中引用的单元格(下例中为 AL11)的两个单元格更改为该单元格中的任何单元格:

=IF(VALUE(AL11) > 0, AL11, INT((NOW() - DATE(2021, 7, 19)) * 86400) * 1000 + ROW())

【讨论】:

  • 这将会改变。 Now() 是一个“实时”时间戳
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多