2016-08-11 50 views
1

我有這樣的一段代碼,我不知道如何在最近打開的文檔的末尾添加段落:谷歌Apps腳本功能appenParagraph不附加到文件末尾

function foo() 
{ 
    var doc = DocumentApp.getActiveDocument(); 
    var doc_id = doc.getId(); 
    var body = doc.getBody(); 

    body.appendParagraph('1'); 
    body.appendParagraph('2'); 

    doc.saveAndClose(); 
    doc = DocumentApp.openById(doc_id); 
    body = doc.getBody(); 

    body.appendParagraph('3'); 
} 

我預期結果是「1 2 3」,但是是「3 1 2」。

我一直在玩setCursor沒有成功。

在此先感謝

+0

這很有趣。我添加了'body.getNumChildren()'而不是nubbers,看起來文檔沒有時間創建一個新的孩子。 https://gist.github.com/oshliaer/124bbcb64ba873f2bc1b113037cb45f2 – oshliaer

回答

1

在Google腳本中,函數只在返回時實際寫入。函數的每一部分都是承諾在某個時刻完成所有工作,並且順序基本相同。我懷疑appendParagraph是問題。我期望它是導致錯誤的doc.saveAndClose()。如果可以這樣做,謹慎的做法是使這個獨立函數的每個部分都在onSuccess()上調用。

所以,當你調用foo():

google.script.run 
    .withSuccessHandler(function() { google.script.run.bar() }) 
.foo(); 

則:

function foo() { 
    append 1 & 2 
} 

function bar() { 
    append 3 
} 
+0

這是真正問題的非常簡化的描述。由於Google的錯誤,我必須分割一個非常大的腳本,其中包含大量的保存未決操作,這意味着我要定期調用saveAndClose()和openByID()。我會嘗試將大功能分成小的功能,並按照您的指示將呼叫鏈接到它們(我會在我的假期回來)。 – Sen