尝试编写一个函数,该函数在文档的<>
括号之间提取文本,写入html,并允许用户使用用户输入字段(通过find and replace函数)替换括号中的文本。无法从Google文档获取实际的带括号的文本。我得到的最接近的是返回括号内的文本所在的段落,但这不起作用,因为然后整个段落都被替换了,而不仅仅是括号内的文本。
这是最近的错误:
TypeError:在对象Text中找不到函数getStartOffset。 (线 11,文件“代码”,项目“查找和替换脚本”)
function doGet() {
var docURL = DocumentApp.openByUrl('XXXX')
var body = docURL.getBody();
var fel0 = body.findText('<*>')
var el0 = fel0.getElement();
var startOffset = el0.getStartOffset();
var endOffset = el0.getEndOffsetInclusive();
var text = el0.asText().getText()
if (elements[0].isPartial())
text = el0.substring(startOffset,endOffset+1);
var template = HtmlService.createTemplateFromFile('urlinput.html');
template.el0 = el0;
return template.evaluate();
}
function findreplace(form){
var docURL = DocumentApp.openByUrl('XXXX')
var body = docURL.getBody();
body.replaceText(body.findText('<*>',fel0).getElement().asText().getText())
}
如何从该body.findText('<*>')
对象中获取实际找到的文本?造成这一困难的很大一部分是*
括号之间的<>
通配符。
答案 0 :(得分:1)
尝试一下:
这只是一个简短的小例子,可以帮助您克服当前的问题。
function findAndReplace(){
var doc=DocumentApp.getActiveDocument();
var body=doc.getBody();
var rel1=body.findText('<.*>');
var el1=rel1.getElement();
var t=el1.asText().getText();
var x=rel1.getStartOffset();
var y=rel1.getEndOffsetInclusive();
var p=rel1.isPartial();
el1.asText().replaceText('<.*>', 'You\'ve been replaced.');
//Logger.log('\nt:%s\nx:%s\ny:%s\np:%s',t,x,y,p?'true':'false');
//var end="is near";
}
这也可以:
function findAndReplace(){
DocumentApp.getActiveDocument().getBody().replaceText('<.*>', 'You\'ve been replaced.');
}
这是您实际要求的:
和往常一样,我读了一些问题,然后做了我想做的事情。我想您想获取文字。因此,这是另一个简短示例。
function findMyText(){
var body=DocumentApp.getActiveDocument().getBody();
var rel=body.findText('<.*>');
var el=rel.getElement();
var eltxt=el.asText().getText();
var txt=eltxt.slice(rel.getStartOffset()+1,rel.getEndOffsetInclusive())
DocumentApp.getUi().alert(txt);
}
我认为您唯一的问题是您需要
.*
,这意味着零个或多个字符。搜索模式是用引号引起来的正则表达式。我希望这会有所帮助。