Google scripts, obtenez une URL de fichier de lecteur
-
22-12-2019 - |
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
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.