【问题标题】:Is there anyway to verify a google spreadsheets ID's无论如何要验证谷歌电子表格ID
【发布时间】:2015-04-27 23:55:00
【问题描述】:

如果这是一个愚蠢的问题,请不要把我钉在十字架上,

但我一直在涉足 Google App Scripts,主要是它在 Google 表格中的用途。 通常当我一直在使用openById() 如果它是一个可能会定期更改的 ID,我会将其放在我的脚本顶部并添加有关如何编辑的注释(对于我将工作表交给的用户,或者对于我来说,如果我还没有工作,则作为提醒它有点,我忘记了)。如果它非常固定并且不太可能改变,我就将它声明为一个 var。

我认为在电子表格中有一个“设置”表并且用户输入设置会更加用户友好。而不必进入脚本编辑器来编辑东西。

但即使是通过工作表或脚本编辑器,在错误位置添加或删除的单个内容也可能会造成严重后果,例如空格或 /

至少通过“设置”表,您可以使用数据验证和正则表达式来控制和拒绝用户输入的内容。

所以我想我的问题是 Google 表格 ID 对我来说似乎很陌生,条形长度,我想知道是否有任何方法可以使用正则表达式或其他东西来验证 ID,而不是检查 ID 服务器端。 谢谢:)

【问题讨论】:

  • 为什么文件 ID 会改变?我认为没有任何方法可以在不使用服务器端代码的情况下检查文件 ID 是否有效。但是调用服务器非常快。您可以使用 JavaScript myString.trim() 删除字符串两边的空格。用户设置表肯定比进入脚本编辑器更好。您可以创建一个菜单和一个对话框来强制用户以某种方式输入。
  • 是的。必须通过打开它来检查服务器端。如果它的坏或脚本没有权限,它将失败
  • 如果每月/每季度创建一个新的电子表格,文件 ID 可能会发生变化。所以没有办法通过正则表达式来验证 ID :( 如果我有类似 IF(SpreadsheetApp.openById(ID HERE)=False/Null){Browser.msgBox("Your spreadsheet ID is wrong, please check it");} 的东西(不是 100% 确定我的头顶上会返回一个糟糕的打开命令)那将是没有正则表达式的最好的检查方式跨度>
  • SpreadsheetApp.openById("gibberish") 只会返回一个异常,不幸的是。所以你可以根据我的回答使用 try...catch。

标签: javascript regex google-apps-script google-sheets


【解决方案1】:

您还可以在脚本中使用 openByUrl(),这样用户只需粘贴一个链接即可。

但如果您必须验证 ID:

ss = SpreadsheetApp.getActiveSpreadsheet();

function validate(){
  //"sheetRef" is the name of the cell where you enter the id
  //this function takes the string value of "sheetRef" 
  //and replaces it with the validation result.
  var sheetRefCell = ss.getRangeByName("sheetRef");
  var sheetRefString = sheetRefCell.getValue();
  var validationResult = '{' + sheetRefString + '}';

  try {
    validationResult = validationResult + 
      ' \n $ references: \n [' + 
      SpreadsheetApp.openById(sheetRefString).getName() +
      ']';
  } 
  catch (e) {
    validationResult = validationResult +
    ' \n $  is an invalid reference: \n [' + 
      e +
    ']';
  }
  finally {
    sheetRefCell.setValue(validationResult);
  }
}

当您运行它时,它会将您在“sheetRef”(ID)单元格中输入的值替换为验证结果消息。我建议您还添加一个基于时间的触发器来不断地重新验证您的 ID。

然后,您可以在电子表格中添加另一个单元格,该单元格将从“sheetRef”中提取经过验证的 ID。此单元格应包含公式:

     = IF (IFERROR( SEARCH( 'invalid' , sheetRef ), 0 ) > 0,
           "Invalid", 
           IFERROR( REGEXEXTRACT( sheetRef,"{(.*?)}" ), "Undetermined" )
        )

因此,具有上述公式的单元格将显示有效的 id 或“无效”/“未确定”。

【讨论】:

  • 感谢代码 sn-p。我会试试看。但我猜它是一个很大的脂肪不验证ID 无论如何。没有标准的命名约定可供 google ID 使用,可以通过正则表达式在客户端进行验证。
  • 它们是随机的 id,长度不等,仅限于数字和字符。您可以添加仅要求字符和数字的验证规则,但我真的没有看到任何意义。
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多