Google apps script DocumentApp.openById()失败,返回“0”;“服务不可用”;
我肯定我一定在做傻事,但我不知道那是什么。如何获取简单文本文件的内容?它可能需要一个.txt扩展名吗?也许这与一年前文件是如何创建的有关 错误是:“服务不可用:文档(第61行,文件“fileFuncs”)”。第61行在下面突出显示 提前感谢你的帮助Google apps script DocumentApp.openById()失败,返回“0”;“服务不可用”;,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我肯定我一定在做傻事,但我不知道那是什么。如何获取简单文本文件的内容?它可能需要一个.txt扩展名吗?也许这与一年前文件是如何创建的有关 错误是:“服务不可用:文档(第61行,文件“fileFuncs”)”。第61行在下面突出显示 提前感谢你的帮助 function testGetFile() { getFile("testGetFile", "WhoAmI"); } function getFile(calledFrom, targetFile) { var root = DriveA
function testGetFile()
{
getFile("testGetFile", "WhoAmI");
}
function getFile(calledFrom, targetFile)
{
var root = DriveApp.getRootFolder();
var files=root.getFiles();
var numFiles=0;
while (files.hasNext()) {
var file = files.next();
numFiles++;
var filename = file.getName();
if (filename == targetFile) {
Logger.log("Success. Found file: " + filename);
Logger.log(' Number of files processed = '+numFiles+'\n\n');
var fileId = file.getId();
**var doc = DocumentApp.openById(fileId); // Line 61:THIS FAILS with above error**
var body=doc.getBody();
var text=body.getText();
Logger.log('text = '+text);// there it is
return text;
}
} // while()
return -1;
}
正如评论中提到的,当条件为true时使用的方法仅适用于Google文档,如果您尝试在其他文件类型上使用这些方法,则将失败 要防止出现这种情况,只需在代码中添加第二个条件,如下所示:
if (filename == targetFile && file.getMimeType()=="application/vnd.google-apps.document") {
通过上述修改,您将不会再出现错误,但有可能无法打开您尝试的目标,因为它不是正确的mime类型。现在我们知道它是文本/普通文档,我们可以添加好的方法来处理它。正如Serge在其帖子中所说,您使用的方法仅对“google文档”文件有效,因此您必须在使用之前检查该文件是否为google文档文件。我们将对文本/普通文档执行相同的操作:
function testGetFile(){
getFile("testGetFile", "WhoAmI");
}
function getFile(calledFrom, targetFile){
var root = DriveApp.getRootFolder();
var files=root.getFiles();
/*
instead of a root getFiles() I prefer to use searchFiles
I'ts less work for your script.
the documentation on search: https://developers.google.com/drive/web/search-parameters
*/
files = root.searchFiles("title = 'WhoAmI' and mimeType = 'text/plain'"); // if it's a txt doc it should have .txt at the end of it's title: "WhoAmI.txt"
var numFiles=0;
while (files.hasNext()) {
var file = files.next();
numFiles++;
var filename = file.getName();
var mime = file.getMimeType();
Logger.log(mime); // produce a lot of output
if (filename == targetFile && mime=="application/vnd.google-apps.document") {
Logger.log("Success. Found GOOGLE DOC file: " + filename);
Logger.log(' Number of files processed = '+numFiles+'\n\n');
var fileId = file.getId();
var doc = DocumentApp.openById(fileId); // this won't fail anymore (I hope)
var body=doc.getBody();
var text=body.getText();
Logger.log('text = '+text);// there it is
return text;
}
else if(filename == targetFile && mime=="text/plain") {
Logger.log("Success. Found TXT file: " + filename);
Logger.log(' Number of files processed = '+numFiles+'\n\n');
var text = file.getBlob().getDataAsString();
Logger.log('text = '+text);// there it is
return text;
}
} // while()
return -1;
}
我突然想到。。。这是否需要使用新的谷歌表单?我希望不是。你测试过你检索到的是什么类型的文件吗?类似于:Logger.log(file.getMimeType())。在你的代码中,你试图打开一个google文档,但是你用google电子表格标签标记了你的文章,你说的是一个txt文件0_o txt可以用driveapps打开,google doc with documentapp和spreadsheet by spreadsheet Apps感谢关于getMimeType的提示。。。它报告,Mime类型:text/plain。我用谷歌电子表格给它加了标签,因为脚本在电子表格中运行。所以,根据你的评论,我正在正确地打开它,是吗?我想我还应该提到,谷歌脚本标签不再可用,所以谷歌电子表格是我能找到的最接近的。我愿意接受关于其他标签的建议,我应该使用这些标签来正确标记它。最后,值得指出的是,这个文本文件是用DocsList.getRootFolder.createFile创建的-我最初是用DocsList.files[fileNum].getContentAsString()打开的。。。但在我创建的文件(当然是我所有的文件)出现权限问题之后。。。我决定改变主意,按照我在这里看到的另一篇帖子的建议,开始使用DriveApps。谢谢你的回复。不过我很困惑。根据哈罗德的说法,“txt可以通过driveapps打开”。正如我在一分钟前对Harold的评论中提到的,mime类型报告为“text/plain”。但您已经声明“当条件为真时使用的方法仅适用于Google文档,如果您尝试在其他文件类型上使用它们,则将失败”。所以,这与哈罗德所说的相矛盾,留下了问题。。。打开文本文档的正确方式是什么?它会因为没有.txt扩展名而失败吗?谢谢你的帮助!请参阅Harold的答案,其中清楚地说明了如何获取txt文件内容。我说的是DocumentApp,它只适用于Google文档。按原样运行时效果很好。非常感谢。谢谢你给我的文档指针!有一个新的相关问题,即使在进行上述纠正之前仍然存在。简单地说,当上述函数用作库的一部分时,调用DriveApp.getRootFolder()失败,并出现权限问题。我想为它启动一个新线程,但唯一的区别是:函数testGetFile(){PT.getFile(“WhoAmI”);}确切的错误消息:执行失败:您没有调用getRootFolder的权限。我的脚本,我的文件夹,我的文件,我的驱动器。。。为什么不允许?