Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何将序号添加到google文档中不连续的段落中?_Google Apps Script_Google Docs_Google Docs Api - Fatal编程技术网

Google apps script 如何将序号添加到google文档中不连续的段落中?

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)

(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(),
}
}

谢谢您的帮助。这是有用的。您的代码帮助创建了代码。