Google apps script 谷歌文档/驱动器-标题编号
是否可以对Google Docs/Drive文档中的标题进行编号?更新:现已在中提供 更新2:由于github上的两个拉取请求,现在处理空标题和空行 更新3:github和下面的代码已修复,用于处理新文档标题标识Google apps script 谷歌文档/驱动器-标题编号,google-apps-script,google-docs,google-drive-api,Google Apps Script,Google Docs,Google Drive Api,是否可以对Google Docs/Drive文档中的标题进行编号?更新:现已在中提供 更新2:由于github上的两个拉取请求,现在处理空标题和空行 更新3:github和下面的代码已修复,用于处理新文档标题标识 我修改了并创建了一个Google Apps脚本,它添加了一个标题工具文档菜单,允许您: 自动编号标题 明确标题和编号 如何自动为谷歌文档标题编号: 打开文档>工具>脚本编辑器 启动一个空白项目 粘贴下面的代码,并使用首选名称保存 选择Run>onOpen并首次授权脚本 选择Run
我修改了并创建了一个Google Apps脚本,它添加了一个标题工具文档菜单,允许您:
- 自动编号标题
- 明确标题和编号
function onOpen() {
DocumentApp.getUi().createMenu('Headings Tools')
.addItem('Auto Number Headings', 'numberHeadingsAdd')
.addItem('Clear Heading Numbers', 'numberHeadingsClear')
.addToUi();
}
function numberHeadingsAdd(){
numberHeadings(true);
}
function numberHeadingsClear(){
numberHeadings(false);
}
function numberHeadings(add){
var document = DocumentApp.getActiveDocument();
var body = document.getBody();
var paragraphs = document.getParagraphs();
var numbers = [0,0,0,0,0,0,0];
for (var i in paragraphs) {
var element = paragraphs[i];
var text = element.getText()+'';
var type = element.getHeading()+'';
// exclude everything but headings
if (!type.match(/HEADING\d/)) {
continue;
}
// exclude empty headings (e.g. page breaks generate these)
if( text.match(/^\s*$/)){
continue;
}
if (add == true) {
var level = new RegExp(/HEADING(\d)/).exec(type)[1];
var numbering = '';
numbers[level]++;
for (var currentLevel = 1; currentLevel <= 6; currentLevel++) {
if (currentLevel <= level) {
numbering += numbers[currentLevel] + '.';
} else {
numbers[currentLevel] = 0;
}
}
Logger.log(text);
var newText = numbering + ' ' + text.replace(/^[0-9\.\s]+/, '');
element.setText(newText);
Logger.log([newText]);
} else {
Logger.log(text);
element.setText(text.replace(/^[0-9\.\s]+/, ''));
}
}
}
函数onOpen(){
DocumentApp.getUi().createMenu('标题工具')
.addItem('自动编号标题','编号添加')
.addItem('清除标题编号','编号ADINGSCLEAR')
.addToUi();
}
函数numberhadingsadd(){
数字编码(真);
}
函数numberhadingsclear(){
数字编码(假);
}
函数编号代码(添加){
var document=DocumentApp.getActiveDocument();
var body=document.getBody();
var段落=document.getparations();
变量数=[0,0,0,0,0,0,0];
对于(第i部分中的风险值){
var元素=第[i]段;
var text=element.getText()+“”;
var type=element.getHeading()+“”;
//除标题外不包括任何内容
如果(!type.match(/HEADING\d/)){
继续;
}
//排除空标题(例如,分页符生成这些标题)
if(text.match(/^\s*$/){
继续;
}
if(add==true){
var level=newregexp(/HEADING(\d)/).exec(type)[1];
变量编号=“”;
数字[级别]+;
对于(var currentLevel=1;currentLevel,如果您想要更简单的东西,有一个名为的Google插件,它允许您对标题进行编号 要安装此加载项,请执行以下操作:
我看到了。您所要做的就是复制/粘贴以前的标题
如果复制并粘贴编号列表中的任何项目,则它将保留其编号,并在相关情况下自动更改编号。我编写了一个用于标记标题的版本,但它也支持普通标题编号。源代码位于此处,可通过G Suite Marketplace作为“标记工具”获得.前面提到的附加组件“目录”今天不可用。 我安装了一个名为“” 一旦安装,您必须应用本机标题样式,然后转到附加组件>降价工具>标题编号,并选择所需的编号样式,该样式将应用于文档中的所有标题。自撰写(2020年4月)以来,许多建议的应用已过时或不再工作 我发现编号标题的方法如下:
我很高兴知道@IvanCachicatari我正计划制作一个改进版本,作为一个附加组件发布,这样我们就不需要每次都打开脚本编辑器了…@IvanCachicatari好主意,你有了!@MrGravity实现这一点的方法是将脚本转换成一个我计划这样做的脚本,但我现在没时间了..哇!我感觉它已经90岁了-再次联系。我们真的需要一个脚本来完成像标题编号这样的基本任务吗?现在我明白了为什么会有这么多编程计划——我们的孩子真的需要知道他们的JavaScript来编写任何工作文档;P@Luciano这有点有效。我看到一件奇怪的事情发生了。如果我从git剪切并粘贴代码,我会得到一个两个结果中的一个是:什么都没有发生,或者第38行出现了正则表达式解析错误。为了让它工作,我必须1)从10/16/17剪切并粘贴git代码,2)保存,3)手动更改nsof建议,4)保存并按上面列出的方式运行。我注意到了一个细微的区别:在您的版本中,第38行删除了\d周围的括号。它如何在本机上仍然不受支持?如果没有显示侧栏,请转到“加载项->目录->侧栏中显示”.我想任何人都可以称他们的附加组件为“目录”。因此,指向实际加载项的链接是有帮助的。我猜你的意思是:该插件是如何安装的-每台机器/浏览器、每个文档、每个用户在google docs上?如果其他人想要编辑该文档,会发生什么情况?遗憾的是,该插件似乎已损坏。由于授权问题,它无法安装。其他人也会得到同样的结果吗?@gavdotnet它对我有效,所以他们一定已经修复了它。多么实用,这个解决方案被低估了。事实上,这是最简单的本地解决方案(如果你还在编辑阶段)!据我所知,这要求您对每个标题级别进行缩进。是这样还是有其他方法?问题是:您需要从同一文档中复制标题。如果您复制“标题1”,例如f