문제

드라이브 파일의 URL을로드 할 스크립트가 필요합니다. 스프레드 시트에 추가 할 드라이브 파일의 URL을로드합니다.'file.getUrl ()'이유로 든 널리 사용되지만 다른 모든 것이 작동하는 것 같습니다.

예를 들어 'file.getName ()'이 작동합니다.그래서 허락이나 무언가가 누락 되었습니까?

여기에 내 코드 (abridged) :

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
.

도움이 되었습니까?

해결책

   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";
  }
.

나는 늦었으므로 지금 그것을 테스트하지 못했고 적절하게 테스트 할 올바른 구조를 만들어야하지만, 이미 구조가 이미 그 두 개의 주석을 바꾸고일했다.

다른 팁

URL 대신 ID 사용 :

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

오늘은 Google을 운전하는 문제를 시작했습니다. Google은 그것을 알고 그것에 대해 연구하고 있습니다. Doclist를 사용하거나 고급 서비스를 사용하여 작업합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top