Scripts do Google, obter uma unidade de url do arquivo
-
22-12-2019 - |
Pergunta
Eu preciso do meu script para carregar o URL de uma unidade de arquivo a ser adicionado para uma folha de cálculo.Por qualquer motivo 'do Arquivo.getUrl()' retorna nulo, mas tudo parece estar funcionando.
Por exemplo, " o Arquivo.getName()' obras.Então, eu estou faltando uma permissão ou algo assim?
Aqui é o meu código (resumida):
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;
}
E o log se você está curioso:
[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
E se eu mudar de getUrl para getName ele (meio) obras
[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
Solução
var url = DocsList.getFileById(fileId).getUrl();
Foi recomendado como uma solução alternativa por um cartaz sobre o problema thread que zig postado.
Então, no seu caso, você usaria:
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";
}
Eu não cheguei a testar isso agora porque já é tarde e eu tenho que construir a estrutura para testá-lo corretamente, mas como você já tem a estrutura de alterar essas duas linhas comentadas e me avise se funcionou.
Outras dicas
Usando o id em vez do url funciona:
var url = "https://docs.google.com/document/d/" + file.getId() + "/";
Hoje começou um problema com a unidade de getUrl, o google está ciente de que, e de trabalhar com ele.Funciona usando docList ou unidade avançada de serviços.