如何使用 google 脚本用字符串替换 Google Docs 中的多行文本
How to replace multi-lines text in Google Docs by a string with google script
我在使用 App 脚本替换 Google 文档中的多行文本时遇到问题。
我花时间搜索和测试类似的问题我学到了很多但我无法完成。
我的 google 文档中有几个文本块,如下所示。我正在使用标记标签来查找需要替换的文本块。我将文本块从“||TAG_LABEL”替换为“||”
||TAG_LABEL
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ut labore et dolore magna aliqua.
Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.||
据我所知,我必须将一个字符串传递给 replaceText。
我检查了控制台,textToReplace 是一个字符串,但文本没有被替换
function regexTestFunction(){
const document = DocumentApp.getActiveDocument();
const documentBody = document.getBody();
const keyWord = "TAG_LABEL";
const textToReplace = "\|{2} (.*?)" + keyWord + "[\s\S]*?\|{2}";
const deleteText = documentBody.replaceText(textToReplace,"");
}
感谢您的帮助
将所有行设置为一行
function setTextToOneSentence() {
let d = DocumentApp.getActiveDocument();
let b = d.getBody();
b.setText("This is one sentence.")
}
从您显示的示例值如下,
||TAG_LABEL
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.||
您要替换的值似乎有多个段落。在这种情况下,似乎不能直接使用replaceText
。那么,在这种情况下,下面的示例脚本怎么样?
示例脚本:
在此示例脚本中,使用了 Google 文档 API。所以,please enable Google Docs API at Advanced Google services.
function regexTestFunction() {
const document = DocumentApp.getActiveDocument();
const documentBody = document.getBody();
const keyWord = "TAG_LABEL";
const textToReplace = "\|{2}.*?" + keyWord + "[\s\S]*?\|{2}";
const r = new RegExp(textToReplace, "g");
const matches = documentBody.getText().match(r);
if (!matches || matches.length == 0) return;
const requests = matches.map(text => ({ replaceAllText: { containsText: { matchCase: false, text }, replaceText: "" } }));
Docs.Documents.batchUpdate({ requests }, document.getId());
}
当你运行这个脚本时,你的示例值被替换为空的""
。
在此示例脚本中,使用了以下流程。
- 从文档中检索所有文本。
- 使用
textToReplace
的正则表达式从文本中检索值。
- 使用 Google 文档替换匹配的文本 API。
注:
- 我不确定您的实际文档。那么当上面的示例脚本没有用的时候,能提供一下示例Document吗?借此,我想确认一下。
参考文献:
对于我的解决方案,我调整了您使用的正则表达式并提出:
function regexTestFunction(){
const document = DocumentApp.getActiveDocument();
const documentBody = document.getBody();
const keyWord = "TAG_LABEL";
var replace = `\|{2}[^\|]*${keyWord}[^\|]*\|{2}`;
var re = new RegExp(replace, "g");
documentBody.setText(documentBody.getText().replace(re,""));
}
它的作用是替换“||TAG_LABEL”和“||”中的文本。我通过修改在您的设置上测试了脚本:
应用脚本后,我得到:
但是,我注意到当标签之间存在单个竖线 (|) 时,脚本不起作用。因此,如果您不希望标签之间有任何单个管道,则可以使用此脚本。
我在使用 App 脚本替换 Google 文档中的多行文本时遇到问题。
我花时间搜索和测试类似的问题我学到了很多但我无法完成。
我的 google 文档中有几个文本块,如下所示。我正在使用标记标签来查找需要替换的文本块。我将文本块从“||TAG_LABEL”替换为“||”
||TAG_LABEL
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.||
据我所知,我必须将一个字符串传递给 replaceText。
我检查了控制台,textToReplace 是一个字符串,但文本没有被替换
function regexTestFunction(){
const document = DocumentApp.getActiveDocument();
const documentBody = document.getBody();
const keyWord = "TAG_LABEL";
const textToReplace = "\|{2} (.*?)" + keyWord + "[\s\S]*?\|{2}";
const deleteText = documentBody.replaceText(textToReplace,"");
}
感谢您的帮助
将所有行设置为一行
function setTextToOneSentence() {
let d = DocumentApp.getActiveDocument();
let b = d.getBody();
b.setText("This is one sentence.")
}
从您显示的示例值如下,
||TAG_LABEL
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.||
您要替换的值似乎有多个段落。在这种情况下,似乎不能直接使用replaceText
。那么,在这种情况下,下面的示例脚本怎么样?
示例脚本:
在此示例脚本中,使用了 Google 文档 API。所以,please enable Google Docs API at Advanced Google services.
function regexTestFunction() {
const document = DocumentApp.getActiveDocument();
const documentBody = document.getBody();
const keyWord = "TAG_LABEL";
const textToReplace = "\|{2}.*?" + keyWord + "[\s\S]*?\|{2}";
const r = new RegExp(textToReplace, "g");
const matches = documentBody.getText().match(r);
if (!matches || matches.length == 0) return;
const requests = matches.map(text => ({ replaceAllText: { containsText: { matchCase: false, text }, replaceText: "" } }));
Docs.Documents.batchUpdate({ requests }, document.getId());
}
当你运行这个脚本时,你的示例值被替换为空的
""
。在此示例脚本中,使用了以下流程。
- 从文档中检索所有文本。
- 使用
textToReplace
的正则表达式从文本中检索值。 - 使用 Google 文档替换匹配的文本 API。
注:
- 我不确定您的实际文档。那么当上面的示例脚本没有用的时候,能提供一下示例Document吗?借此,我想确认一下。
参考文献:
对于我的解决方案,我调整了您使用的正则表达式并提出:
function regexTestFunction(){
const document = DocumentApp.getActiveDocument();
const documentBody = document.getBody();
const keyWord = "TAG_LABEL";
var replace = `\|{2}[^\|]*${keyWord}[^\|]*\|{2}`;
var re = new RegExp(replace, "g");
documentBody.setText(documentBody.getText().replace(re,""));
}
它的作用是替换“||TAG_LABEL”和“||”中的文本。我通过修改在您的设置上测试了脚本:
应用脚本后,我得到:
但是,我注意到当标签之间存在单个竖线 (|) 时,脚本不起作用。因此,如果您不希望标签之间有任何单个管道,则可以使用此脚本。