Google Apps脚本 - 打字机效果

时间:2017-05-25 19:12:23

标签: javascript google-apps-script google-docs

我正试图在google docs的谷歌应用程序脚本中添加一种“打字机效果”。我想让它输入文本,在这种情况下是一个维基百科文章,好像用户正在键入它,所以添加一个延迟。不幸的是函数appendText(),即使你使用Utilities.sleep,它仍然只是在脚本完成后立即输出整篇文章。我会用什么功能来完成这样的事情?

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

3 个答案:

答案 0 :(得分:1)

我试过@ZigMandel的建议。它似乎有效但文本是从左侧输入的。

stripe = @subscription.build_stripe ...

答案 1 :(得分:0)

要让脚本打印出每个字符之间的延迟,您可以将睡眠方法置于for循环中。

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

我认为这可以为您提供所需的效果。

答案 2 :(得分:0)

您需要刷新文档。 DocumentApp API没有flush方法(如SpreadsheetApp),但您仍然可以使用 saveAndClose 刷新它,然后重新打开文档(例如使用document = DocumentApp.openById(&#34;本身份识别码&#34)

当脚本完成时会自动调用saveAndClose,但不会在您进行每次更改后自动调用,因为Google会根据性能对这些更改进行批处理。

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