Question

J'ai besoin de mon script pour charger l'URL d'un fichier d'entraînement à ajouter à une feuille de calcul.Pour une raison quelconque "File.Getturl ()" renvoie NULL, mais tout le reste semble fonctionner.

Par exemple, 'File.getName ()' fonctionne.Alors je manque une permission ou quelque chose?

Voici mon code (abrégé):

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

et le journal si vous êtes curieux:

[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

Et si je change Geturl pour l'obtenir (un peu) fonctionne

[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

Était-ce utile?

La solution

   var url = DocsList.getFileById(fileId).getUrl();

a été recommandé comme solution de contournement par une affiche sur le fil d'émission que Zig posté.

Donc, dans votre cas, vous utiliseriez:

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

Je n'ai pas eu de tester cela en ce moment, car il est tard et je devrais construire une structure droite pour le tester correctement, mais comme vous avez déjà la structure change ces deux lignes commentées et laissez-moi savoir si celatravaillé.

Autres conseils

Utilisation de l'ID au lieu de l'URL fonctionne:

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

Aujourd'hui a commencé un problème avec Drive Geturl, Google en est conscient et travaille dessus. Travaille-t-il à l'aide de DOCLIST ou de services avancés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top