0

我想问一下地址线中的值和我使用getId()时得到的id有什么区别。例如,对于一份文档,其getId()值为:

t8K_TLQPmKzgB72pY4TblUg

而在地址线中,关键是:

0Amu7sNvd2IoudDhLX1RMUVBtS3pnQjcycFk0VGJsVWc

到目前为止我发现的是,当您在 base64 中编码 getId 时,您或多或少会得到地址线中密钥的最后一部分

 (base64Encode(t8K_TLQPmKzgB72pY4TblUg) = dDhLX1RMUVBtS3pnQjcycFk0VGJsVWc=).

但是我仍然不知道 0Amu7sNvd2Iou代表什么,因为我的印象是这部分在旧文档中也有所不同,因此我不能一0Amu7sNvd2Iou开始就一直使用组合键

为什么我需要知道这一点:我的脚本使用 getId 方法,但有些用户手动填写他们的 id(他们只是从地址线的密钥中复制粘贴它)。结果是,当我尝试比较它们时,尽管它们引用的是同一个文档,但我无法匹配它们,就像它们完全不同......

非常感谢您为这个问题带来了光明

编辑@taras:我还可以使用密钥和 id 打开文档。一个文档有两种不同的ID,这很奇怪。例如,如果我想比较某人从地址行复制粘贴到文档的值是否与我打开的文件相同,即使它是同一个文件,我也不会得到正确的结果

var keyFromHeadline = "0Amu7sNvd2IoudDhLX1RMUVBtS3pnQjcycFk0VGJsVWc"
var id = SpreadsheetApp.getActiveSpreadsheet.getId();
if (keyFromHeadline==id) Browser.msgBox("blabla")

因此,我会对这两个不同值的原因以及如何匹配它们感兴趣

4

2 回答 2

0

只是一个建议:

由于 base64Encode 似乎为您提供了地址 url 的重要部分,您可以使用 amatch来检查文档是否相同。

就像是 :

    if('manually_entered_key'.match(base64Encode('the_value_obtained_by_getId')==base64Encode('the_value_obtained_by_getId')){
   // consider as the same doc ...
于 2012-09-19T13:51:05.753 回答
0

如果您需要唯一的文件 ID,只需将它们标准化。每次用户手动输入 ID 时,只需通过 fileIdNormalize 函数运行它:

function fileIdNormalize(id) {
  if (typeof id == 'string' && id.length > 0)
    return DocsList.getFileById(id).getId();
  return '';
}
于 2012-09-20T10:52:04.990 回答