Javascript 谷歌应用程序脚本——用卷曲的引号替换直引号
当我在我的GoogleDocs iPad应用程序上输入一本小说时,它使用了上下引号,如下图所示:“.现在,我想把所有这些引号都改成卷曲的,而不必手动更改 我写了一个简单的GoogleApps脚本文件来处理这个问题,但当我运行它时,它似乎无限期地说“Running function myFunction…”Javascript 谷歌应用程序脚本——用卷曲的引号替换直引号,javascript,google-apps-script,google-docs,google-apps,Javascript,Google Apps Script,Google Docs,Google Apps,当我在我的GoogleDocs iPad应用程序上输入一本小说时,它使用了上下引号,如下图所示:“.现在,我想把所有这些引号都改成卷曲的,而不必手动更改 我写了一个简单的GoogleApps脚本文件来处理这个问题,但当我运行它时,它似乎无限期地说“Running function myFunction…” 这是我的代码。前几行使用简单的RePrEtEXT方法处理句子中间的引号。同时,while语句测试在引用之前是否有断线(\n),并使用它来确定是否开始或结束引用。 function myFunc
这是我的代码。前几行使用简单的RePrEtEXT方法处理句子中间的引号。同时,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()重新打开文档
非常感谢您的帮助。提前谢谢!我不确定确切的限制,但我认为您可以在while循环中包括一个计数器,每50或100,通过Logger.log()输出一个计数器;一旦您掌握了限制计数,您可以执行建议的操作
i、 e.当接近极限时,通过调用Document.saveAndClose()刷新/保存更改,然后使用Document.openById()重新打开文档,重新开始主循环我不确定确切的限制,但我认为您可以在while循环中包括一个计数器,每50或100个计数器,通过Logger.log()输出一次;一旦您掌握了该限制计数,您可以按照建议执行
i、 e.接近极限时,通过调用Document.saveAndClose()刷新/保存更改,然后通过使用Document.openById()重新打开文档,重新开始主循环。关于错误消息,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();
}
}
代码还有一个问题。如果引号位于文档的最开头(如第一个字符),则脚本将插入错误的引号样式。但是,我计划手动修复此问题。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();
}
}
代码还有一个问题。如果引号位于文档的最开头(如第一个字符),则脚本将插入错误的引号样式。但是,我计划手动修复该问题