2017-05-25 62 views
1

我正在嘗試在Google文檔的Google應用腳本中添加一種'打字機效果'。我想讓它輸入文本,在這種情況下是維基百科文章,就好像用戶正在輸入文字一樣,所以請加上延遲。不幸的是函數appendText(),即使你使用Utilities.sleep,它仍然只是在腳本完成後立即鍵入整個文章。我會用什麼函數來完成這樣的事情?Google Apps腳本 - 打字機效果

function onOpen(e) { 
    DocumentApp.getUi().createAddonMenu() 
      .addItem('Start', 'myFunction') 
      .addToUi(); 
} 

function onInstall(e) { 
    onOpen(e); 
} 

function myFunction() { 
    var body = DocumentApp.getActiveDocument().getBody(); 
    var text = body.editAsText(); 
    var response = UrlFetchApp.fetch('https://en.wikipedia.org/w/api.php?&format=json&action=query&generator=random&grnnamespace=0&prop=title&grnlimit=1'); 
    var json = JSON.parse(response); 
    for (key in json.query.pages) { 
      var title = json.query.pages[key].title; 
    } 
    var url = 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&explaintext=&titles=' + title 
    var response2 = UrlFetchApp.fetch(url); 
    var json2 = JSON.parse(response2); 
    for (key in json2.query.pages) { 
      var content = json2.query.pages[key].extract; 
    } 
    //content = content.replace(/==.*==/, '====') 
    var all = title + '\n' + content; 
    text.appendText("Start\n"); 
    Utilities.sleep(1000); 
    text.appendText(content); 
} 
+0

請修改您的問題以包括您迄今爲止編寫的代碼。 –

+0

@JordanRunning我剛添加它 –

+0

嘗試每次更改後刷新谷歌文檔。 –

回答

0

要讓腳本打印出每個字符之間的延遲,可以將sleep方法放入for循環。

for(var i = 0; i < content.length; i++) { 
    text.appendText(content[i]); 
    Utilities.sleep(200); 
} 

我想這會給你你正在尋找的效果。

+0

這也似乎不工作 - 它似乎睡眠正在工作,但它不直觀顯示字母,直到腳本超時。 – OblongMedulla

+0

是的,@OblongMedulla是正確的。 –

0

您需要刷新文檔。所述DocumentApp API不具有沖洗方法(如SpreadsheetApp)但仍可以通過使用saveAndClose沖洗,然後重新打開與文檔的文檔(例如= DocumentApp.openById(「本身份識別碼」)

saveAndClose當一個腳本結束時自動調用,但不是每一步更改您做出的谷歌批量這些變化對性能。

https://developers.google.com/apps-script/reference/document/document

+0

在我的測試中,這似乎不起作用。 – OblongMedulla

+1

您是否嘗試過在小睡之後重新打開它? –

+0

不,請重新打開哪些代碼?生病嘗試 – OblongMedulla

1

我已經試過@ZigMandel建議。這似乎是工作,但文本正在從類型左邊出。

function onOpen(e) { 
    DocumentApp.getUi().createAddonMenu() 
     .addItem('Start', 'myFunction') 
     .addToUi(); 
} 

function onInstall(e) { 
    onOpen(e); 
} 

function myFunction() { 
    var body = DocumentApp.getActiveDocument().getBody(); 
    var text = body.editAsText(); 
    var response = UrlFetchApp.fetch('https://en.wikipedia.org/w/api.php?&format=json&action=query&generator=random&grnnamespace=0&prop=title&grnlimit=1'); 
    var json = JSON.parse(response); 

    for (key in json.query.pages) { 
     var title = json.query.pages[key].title; 
    } 
    var url = 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&explaintext=&titles=' + title 
    var response2 = UrlFetchApp.fetch(url); 
    var json2 = JSON.parse(response2); 
    for (key in json2.query.pages) { 
     var content = json2.query.pages[key].extract; 
    } 

    //format(content); 
    //var par1 = body.insertParagraph(0, title); 
    //par1.setAlignment(DocumentApp.HorizontalAlignment.CENTER); 
    var str = "Sphinx of black quartz, judge my vow." 
    var split = str.split(""); 
    for (var i = split.length - 1; i >= 0; i--) { 
     text.appendText(split[i]); 
     DocumentApp.getActiveDocument().saveAndClose(); 
     body = DocumentApp.getActiveDocument().getBody(); 
     text = body.editAsText(); 
    } 
} 

function format(txt) { 
    txt = '\n' + txt; 
    txt = txt.replace(/\===(.+?)\===/g, "").replace(/\== 
(.+?)\==/g,"").replace(/\n+/g, "\n").replace(/\n/g, "\n" + "   "); 
    return txt; 
}