【问题标题】:How to generate an uuid in google sheet?如何在谷歌工作表中生成 uuid?
【发布时间】:2018-07-09 12:07:13
【问题描述】:

如何在 google sheet 中生成 uuid(例如 ccb8a660-91c9-a556-58e0-4fa7-229516872004)。

要么用宏?还是公式?

【问题讨论】:

    标签: google-apps-script google-sheets uuid google-sheets-custom-function


    【解决方案1】:

    您可以使用Utilities.getUuid() 生成 UUID。但是需要使用自定义函数来实现您想要的,因为在电子表格的函数中没有针对它的函数。为了生成 UUID,请执行以下流程。

    1. 打开用于创建 Google Apps 脚本的脚本编辑器。
    2. 复制并粘贴以下脚本并保存。
    3. =uuid() 放入工作表中的单元格。

    通过这个,你可以获得UUID。

    脚本:

    function uuid() {
      return Utilities.getUuid();
    }
    

    参考:

    如果我误解了你的问题,我很抱歉。

    补充:

    使用自定义函数时,通过电子表格的自动重新计算来更改值。如果你想修复这个值,这个示例脚本怎么样?请将此视为几种解决方法之一。

    示例脚本:

    function onEdit(e) {
      if (e.range.getFormula().toUpperCase()  == "=UUID(TRUE)") {
        e.range.setValue(Utilities.getUuid());
      }
    }
    
    function uuid() {
      return Utilities.getUuid();
    }
    
    • 当您使用此脚本时,请执行以下流程。
      1. 将脚本复制并粘贴到电子表格的绑定脚本并保存。
      2. =uuid() 放入工作表中的单元格。
        • 在这种情况下,=uuid() 被放置为自定义函数。因此,当电子表格自动计算时,值会发生变化。
      3. =uuid(true) 放入工作表中的单元格。
        • 在这种情况下,=uuid()onEdit() 作为值。因此,即使电子表格是自动计算的,该值也不会改变。

    注意:

    • 在这种情况下,=uuid(true)可以在手动放置函数时使用,因为这使用了OnEdit事件触发器。
    • 这是一个简单的示例脚本。因此,请根据您的情况进行修改。

    参考:

    【讨论】:

    • @I'-'我感谢您的评论。运行Utilities.getUuid() 时,结果值始终是差异。但我不知道所创造的价值是否会随着时间而改变。我很抱歉这种情况。如果我发现了这些信息,我想报告它。如果我误解了您的评论,请告诉我。
    • @I'-'我也对时代的变化感兴趣。我想尝试调查一下。感谢您提供有趣的主题。
    【解决方案2】:

    thinkyfish 公式已根据 broofa 在How to create a GUID / UUID 的回复进行了更正

    =CONCATENATE(MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-4",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("89ab",RANDBETWEEN(1,4),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1))
    

    UUID 第 4 版合规性。

    【讨论】:

    【解决方案3】:

    创建的uuid随时间变化。

    我认为如果不使用 Apps 脚本,这个问题将无法解决。
    例如:

    var sheet = SpreadsheetApp.getActiveSheet();
    var values = sheet.getRange('A1:A10').getValues();
    
    for (var i = 0; i < values.length; i++) {
      // When a cell is empty, set a uuid to the cell.
      if (!values[i][0]) {
        sheet.getRange('A' + (1 + i)).setValue(Utilities.getUuid());
      }
    }
    

    【讨论】:

      【解决方案4】:

      我尝试创建一个纯工作表函数,该函数仅使用工作表代码创建完整的 uuid,这就是我最终得到的结果,它非常愚蠢,但它似乎确实有效。每次工作表更新时它都会重新生成,所以这可能没有用,但我还是想发布它,因为没有可用的纯工作表实现。

      =CONCATENATE(MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1))
      

      【讨论】:

        【解决方案5】:

        感谢您提供有关此线程的所有详细信息。我最终做的是创建一个宏,它将填充一个范围内的所有选定单元格,每个单元格都有自己的 UUID。我使用这种方法在选定的单元格中设置一个值,而不用担心“覆盖”它们。我可以使用保护范围来避免无意中更新单元格。

        此脚本有 2 项检查:

        1. 所选范围必须只覆盖一列
        2. 所有选定的单元格必须为空白(即,选定的单元格不能有值)

        如果满足上述 2 个约束条件,则每个单元格都会填充一个值。这是宏代码:

        function fillSelectedWithUUIDs() {
          let curSheet = SpreadsheetApp.getActiveSheet();
          let curSelection = curSheet.getSelection();
          let curRange = curSelection.getActiveRange();
        
          let ui = SpreadsheetApp.getUi();
        
          if (curRange.getNumColumns() !== 1) {
            ui.alert(`Range must only contain one column.`);
            return;
          }
        
          for (let i = 0; i < curRange.getNumRows(); i++) {
            let curCell = curRange.getCell(1 + i, 1);
            if (curCell.getValue() !== "") {
              ui.alert(`ERROR: Cannot overwrite value in cell (${curCell.getA1Notation()})`);
              return;
            }
          }
        
          for (let i = 0; i < curRange.getNumRows(); i++) {
            curRange.getCell(1 + i, 1).setValue(Utilities.getUuid())
          }
        
          ui.alert(`Added ${curRange.getNumRows()} UUIDs`);
        }
        

        希望这对某些人有用!

        【讨论】:

          【解决方案6】:

          如果您只想要一个可以快速插入的公式,请尝试此操作。这里需要注意的是,生成的值中不会包含任何字母字符,但无论如何这些对于几乎任何目的都应该“足够好”。

          =RANDBETWEEN(10000000,99999999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999)& "-" & RANDBETWEEN(1000,9999) & RANDBETWEEN(10000000,99999999)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-01-18
            • 2017-12-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多