无论如何都要验证谷歌电子表格ID

时间:2015-04-27 23:55:00

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

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

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

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

但即使是通过工作表或脚本编辑器,在错误的地方添加或删除的单个内容也可能导致havock,如空格或/

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

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

1 个答案:

答案 0 :(得分: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。

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

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

因此具有上述公式的单元格将显示有效的ID或"无效" /"未确定"。