将代码从DocList迁移到DriveApp

时间:2014-06-05 17:29:41

标签: google-apps-script google-drive-api

我正在尝试将以下代码移植到DriveApp,但是" doc.append"当我迁移到" DriveApp.append"时,函数不起作用。

function process(thread, threadStart, folder, pass){

  var start = Date.now();
  var label = folder.getName();
  var html; 

  if(pass > 1){
    var docID = folder.createFile(label + "(part " + pass + ")", '<html>',         MimeType.HTML).getFolderById();
  }
  else{
    var docID = folder.createFile(label + "(part 1)", "<html>",     MimeType.HTML).getFolderById();
  }
  var doc = DocsList.getFolderById(docID);

  try{
     doc.append(globalTOC(total_messages(thread), thread.length, label));
  }
  catch(exception){
    Utilities.sleep(5000);
    doc.append(globalTOC(total_messages(thread), thread.length, label));
    }

2 个答案:

答案 0 :(得分:1)

您发布的代码存在一些问题。

首先,它似乎混淆了文件夹,文件和文件ID。第一部分在文件夹中创建文件,但随后尝试调用getFolderById()。文件没有此名称的方法。然后它尝试从该ID获取文件。如果你想要一个文件及其ID,你应该只使用原始文件并在其上调用getId():

var myDoc = folder.createFile(myFileName, 
    myHTMLcontents,  MimeType.HTML);
var myDocID = myDoc.getId();

如果您使用的是DriveApp文件或DocsList文件(它们是不同的对象且不应互换使用),则上述操作将起作用。

其次,目前没有通过DriveApp.File提供的append()函数。如果你需要附加功能,一种方法是将文件的内容提取为字符串,附加到该字符串,并使用新字符串重置内容:

var blob = doc.getBlob();
var content = blob.getDataAsString();
content += '  NEW CONTENT\n';
doc.setContent(content);

请注意,如果内容超过10MB,setContent()将抛出异常。

另一种方法是将您的文件构建为Google文档,根据需要附加段落,最后将该文档转换为您需要的文件类型。

答案 1 :(得分:0)

Ryan Rith写道&#39; DriveApp文件或文档列表文件是不同的对象,不应互换使用&#39;

也许我在migrating from docslist to driveapp提供的andwer在尝试将代码从DocsList移植到DriveApp时可以提供帮助