2014-06-05 102 views
1

我試圖將以下代碼移植到DriveApp,但在遷移到「DriveApp.append」時,「doc.append」功能不起作用。將代碼從DocList移植到DriveApp

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

回答

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

注意setContent()將拋出一個異常如果內容超過10MB。

另一種方法是將您的文件構建爲Google文檔,根據需要添加段落,並最終將該文件轉換爲您需要的文件類型。

0

瑞安Rith寫道:「DriveApp文件或已超出DocsList文件是不同的對象,不應該交替使用」

也許我在migrating from docslist to driveapp提供的andwer可以幫助在試圖從端口的已超出DocsList代碼DriveApp