DocumentApp.openById()失败并显示“Service unavailable”

时间:2014-03-04 05:45:03

标签: google-apps-script google-sheets

我确定我必须做些傻事,但我不知道它是什么。如何获取简单文本文件的内容?是否需要.txt扩展名?也许它与一年前创建文件的方式有关?

错误是:'服务不可用:文档(第61行,文件“fileFuncs”)'。第61行突出显示如下。

提前感谢您的帮助。

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

2 个答案:

答案 0 :(得分:1)

如评论中所述,条件为真时使用的方法仅适用于Google文档,如果您尝试在其他文件类型上使用它们,则会失败。

为了防止这种情况,只需在代码中添加第二个条件,如下所示:

if (filename == targetFile && file.getMimeType()=="application/vnd.google-apps.document") {

通过上述修改,您将不会再出现错误,但您可能无法打开您尝试过的目标,因为它不是正确的mime类型。

答案 1 :(得分:1)

现在我们知道它是一个text / plain doc,我们可以添加好的方法来处理它。正如Serge所说,你使用的方法仅适用于“google文档”文件,所以你必须在使用之前检查这是一个google文档文件。我们将使用text / plain文档执行相同的操作:

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