当我在Google Docs iPad应用程序上输入一本小说时,它使用了直接的上下引号,如下所示:"。现在,我想将所有这些引号更改为卷曲类,而不必手动更改所有引号。
我写了一个简单的Google Apps脚本文件来处理这个问题,但是当我运行它时,它似乎说"运行函数myFunction ......"下去。
这是我的代码。前几行使用简单的replaceText方法处理句子中间的引号。同时,while语句测试引号之前是否存在换行符(\ n),并使用它来确定是否要设置开头或结尾。
function myFunction() {
var body = DocumentApp.getActiveDocument().getBody();
//Replace quotes that are not at beginning or end of paragraph
body.replaceText(' "', ' “');
body.replaceText('" ', '” ');
var bodyString = body.getText();
var x = bodyString.indexOf('"');
var bodyText = body.editAsText();
while (x != -1) {
var testForLineBreaks = bodyString.slice(x-2, x);
if (testForLineBreaks == '\n') { //testForLineBreaks determines whether it is the beginning of the paragraph
//Replace quotes at beginning of paragraph
bodyText.deleteText(x, x);
bodyText.insertText(x, '“');
} else {
//Replace quotes at end of paragraph
bodyText.deleteText(x, x);
bodyText.insertText(x, '”');
}
x = bodyString.indexOf('"');
}
}
我似乎无法找到它的错误。更混淆的是,当我点击调试器时,它会说
保存文档前应用了太多更改。请使用Document.saveAndClose()以较小批量保存更改,然后使用Document.openById()重新打开文档。
我很感激所有这方面的帮助。提前谢谢!
答案 0 :(得分:2)
我不确定确切的限制,但我认为你可以在你的while循环中包含一个计数器,并且每50或100,通过 Logger.log()输出;一旦你掌握了这个限制数,你就可以按照建议行事,
即。当接近极限时,通过调用 Document.saveAndClose()来刷新/保存更改,然后通过使用 Document.openById() <重新打开文档再次使用主循环/ p>
答案 1 :(得分:0)
some1对于错误消息是正确的,但不幸的是,这没有找到问题的根源:
在我的while循环结束时,变量 bodyString 用于查找要更改的引号位置。问题是bodyString只是一个字符串,因此每次我对文档进行更改时都需要更新它。
另一个问题,虽然更基本,但是Google将\ n计为一个字符,因此我必须将var testForLineBreaks = bodyString.slice(x-2, x);
中的参数更改为x-1, x
。
在修补这些问题后,我的完成代码如下所示:
function myFunction() {
var body = DocumentApp.getActiveDocument().getBody();
//Replace quotes that are not at beginning or end of paragraph
body.replaceText(' "', ' “');
body.replaceText('" ', '” ');
var bodyString = body.getText();
var x = bodyString.indexOf('"');
var bodyText = body.editAsText();
while (x != -1) {
var testForLineBreaks = bodyString.slice(x-1, x);
if (testForLineBreaks == '\n') { //testForLineBreaks determines whether it is the beginning of the paragraph
//Replace quotes at beginning of paragraph
bodyText.deleteText(x, x);
bodyText.insertText(x, '“');
} else {
//Replace quotes at end of paragraph
bodyText.deleteText(x, x);
bodyText.insertText(x, '”');
}
body = DocumentApp.getActiveDocument().getBody();
bodyString = body.getText();
x = bodyString.indexOf('"');
bodyText = body.editAsText();
}
}
代码还存在一个问题。如果引用位于文档的最开头,如第一个字符,则脚本将插入错误的引用样式。但是,我打算手动修复它。