Google apps script 如何将序号添加到google文档中不连续的段落中?
在学术论文中,现象的例子通常放在自己的顺序编号段落中。这些段落不一定相邻,而是分散在整个文档中。下面是一个带有顺序编号段落的示例文档,给出了当前主题的示例: 有很多种语言,例如英语(参见示例1)、西班牙语 (参见示例2)、丹麦语(参见示例3)Google apps script 如何将序号添加到google文档中不连续的段落中?,google-apps-script,google-docs,google-docs-api,Google Apps Script,Google Docs,Google Docs Api,在学术论文中,现象的例子通常放在自己的顺序编号段落中。这些段落不一定相邻,而是分散在整个文档中。下面是一个带有顺序编号段落的示例文档,给出了当前主题的示例: 有很多种语言,例如英语(参见示例1)、西班牙语 (参见示例2)、丹麦语(参见示例3) (1)谷歌文档很酷。 (2)谷歌公司的员工。 (3)谷歌Dokummenter seje 语言学是对语言的科学研究,例如, 葡萄牙语(参见示例4): (4)葡萄牙 语言,人类和计算机,是迷人的 我知道,静态文本可以通过以下方式插入到google文档中的光标
(1)谷歌文档很酷。
(2)谷歌公司的员工。
(3)谷歌Dokummenter seje 语言学是对语言的科学研究,例如, 葡萄牙语(参见示例4):
(4)葡萄牙 语言,人类和计算机,是迷人的 我知道,静态文本可以通过以下方式插入到google文档中的光标处:
function insertHelloWorld() {
var cursor = DocumentApp.getActiveDocument().getCursor();
cursor.insertText("Hello World!");
}
我的问题:
当插入时,我如何跟踪数字,这样我就可以在一个新的例子插入文本中间时更新所有的数字了?因此,如果我要插入一个德语示例作为上面的数字(2)(在英语和西班牙语示例之间),我想更新新插入的德语示例后面的示例编号:
(1)谷歌文档很酷
(2)谷歌文本和Tabellen sind cool
(3)谷歌公司的员工
(4)谷歌Dokumenter seje。
(5)葡萄牙
将“reference”设为(参见示例
n
)”字符串,其中n
是一个数字
假设“示例”是“(n
)示例文本…”,其中n
是一个数字,这始终是一行的开头
此解决方案假设您已手动排序“参考”和“示例”。代码不会对示例列表重新排序。因此,不管当前的n
值是什么,我们只需要遍历整个文档并应用序列号
如果在运行更新时可以忘记所有格式设置,则更容易实现。在这种情况下,您可以使用常规JavaScript并将String.prototype.replace
应用于整个主体。但是,我假设您不想删除格式,因此我们不得不使用DocumentApp
模型
在我的示例中,我使用body.findText
循环遍历文档。不幸的是,这使用了正则表达式字符串,而不是普通的RegExp对象,后者需要额外的反斜杠来查找文字括号。此外,我使用的是deleteText
和insertText
文本函数,而不是String.prototype.replace
,因为使用replace
将作用于整个元素,而不是findText
函数找到的开始和结束偏移量
函数updateSequentialReferences(){
const body=DocumentApp.getActiveDocument().getBody();
替换顺序(正文“\\(参见示例\\d+\\)”,计数=>`(参见示例${count})`);
替换顺序(正文“^\(\\d+\\)(.*)”,(计数,匹配)=>match.replace(/^\(\d+\)/,`(${count})`);
}
函数替换顺序(正文、regexString、replacerFn){
让foundRef=body.findText(regexString);
让计数=1;
while(foundRef!==null){
常量{element,end,start}=unwaprangelement(foundRef);
const text=element.asText();
const match=text.getText().slice(开始、结束+1);
text.deleteText(开始、结束);
insertText(start,replacerFn(count,match));
++计数;
foundRef=body.findText(regexString,foundRef);
}
}
函数展开范围元素(元素){
返回{
元素:element.getElement(),
end:element.getEndOffsetInclusive(),
start:element.getStartOffset(),
}
}
谢谢您的帮助。这是有用的。您的代码帮助创建了代码。