【问题标题】:Google scripts, get a drive file url谷歌脚本,获取驱动文件 url
【发布时间】:2014-02-27 01:18:33
【问题描述】:

我需要我的脚本来加载要添加到电子表格的驱动器文件的 URL。无论出于何种原因,'File.getUrl()' 返回 null,但其他一切似乎都在工作。

例如,'File.getName()' 有效。那么我是否缺少权限或其他内容?

这是我的代码(删节):

function loadURL(folderPath, name) {       
  var folder = loadFolder(folderPath);

  // Find file
  var files = folder.searchFiles('modifiedDate >= "' + getDate() + '" and title = "' + name + '"'),
      file, found = 0;

  for (; files.hasNext(); found++) {
    file = files.next();
  }

  if (found == 1) {
    /////////////////////////////////
    // Here is 'getUrl'
    /////////////////////////////////
    var url = file.getUrl();

    Logger.log("Loaded: " + url);
    return url;
  } else {
    throw "Error loading file";
  }
}

/**
* ** NOTE: THIS SEEMS TO BE WORKING FINE **
* Load a folder
* @param {string} url
* @return {Folder}
*/
function loadFolder(url) {
  var folders = url.split('/'),
      folder = DriveApp.getRootFolder();

  Logger.log("Loading URL: " + url);

  for (var key in folders) {
    var fName = folders[key];    
    if (fName.length > 0) {
      var fIt = folder.getFoldersByName(fName),
          found = 0;

      Logger.log(" -> " + fName);

      for (; fIt.hasNext(); found++) {
        folder = fIt.next();
      }

      if (found == 0) {
        throw "Could not find the folder '" + fName + "'";
      } else if (found > 1) {
        throw "Found multiple matches to the folder '" + fName + "'";
      }
    }
  }

  return folder;
}

如果你好奇的话,还有日志:

[14-02-26 19:56:15:980 EST] Loading URL: Work/PDF/
[14-02-26 19:56:15:981 EST]  -> Work
[14-02-26 19:56:16:120 EST]  -> PDF
[14-02-26 19:56:16:450 EST] Loaded: null

如果我将 getUrl 更改为 getName 它(有点)工作

[14-02-26 20:10:20:588 EST] Loading URL: Work/PDF/
[14-02-26 20:10:20:589 EST]  -> Work
[14-02-26 20:10:20:727 EST]  -> PDF
[14-02-26 20:10:21:058 EST] Loaded: Test

【问题讨论】:

标签: google-apps-script geturl


【解决方案1】:

使用 id 代替 url 有效:

var url = "https://docs.google.com/document/d/" + file.getId() + "/";

【讨论】:

    【解决方案2】:
       var url = DocsList.getFileById(fileId).getUrl();
    

    被 zig 发布的问题线程上的发帖者推荐为解决方法。

    所以,在你的情况下,你会使用:

      for (; files.hasNext(); found++) {
        file = files.next();
      }
    
      if (found == 1) {
        /////////////////////////////////
        // Here is 'getUrl'
        /////////////////////////////////
        var fileId = file.getId();//new line added to getId of the file
    
        //modified url line to reference doc by id
        var url = DocsList.getFileById(fileId).getUrl();
    
        Logger.log("Loaded: " + url);
        return url;
      } else {
        throw "Error loading file";
      }
    

    我现在没能测试这个,因为太晚了,我必须建立一个正确的结构来正确测试它,但是既然你已经有了这个结构,请更改这两个注释行,如果是这样,请告诉我工作。

    【讨论】:

      【解决方案3】:

      今天开始出现驱动器 getUrl 的问题,谷歌已经意识到它并正在处理它。 是否使用 docList 或驱动高级服务工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多