Разработчики интерфейса документов Google намеренно постарались избавить его от лишних элементов. Минимализм сервиса - его безусловное достоинство. Но что делать, если для работы с текстом нужно что-то, чего в функционале документов Google не заложено? Мне, например, при работе с большими текстами очень не хватало возможности создавать иерархические нумерованные заголовки. То есть просто отметить заголовки номерами можно, но иерархию при этом создать не получится.
Но то, что иерархических нумерованных заголовки в функционале документов Google нет, не значит, что их там нельзя создавать. Создавать их можно! Для этого нам понадобится вот такой Google Apps скрипт, разработанный +Patric Rebondy.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function addHeaderNumbering () { | |
var pars = DocumentApp.getActiveDocument().getBody().getParagraphs(); | |
var counterHeader = [0, 0, 0, 0, 0, 0]; | |
for(var i=0; i<pars.length; i++) { | |
var par = pars[i]; | |
var hdg = par.getHeading(); | |
if (hdg == DocumentApp.ParagraphHeading.HEADING1) { | |
_addNumberingForHeaderType(DocumentApp.ParagraphHeading.HEADING1, par, 0, counterHeader); | |
} else if (hdg == DocumentApp.ParagraphHeading.HEADING2) { | |
_addNumberingForHeaderType(DocumentApp.ParagraphHeading.HEADING2, par, 1, counterHeader); | |
} else if (hdg == DocumentApp.ParagraphHeading.HEADING3) { | |
_addNumberingForHeaderType(DocumentApp.ParagraphHeading.HEADING3, par, 2, counterHeader); | |
} else if (hdg == DocumentApp.ParagraphHeading.HEADING4) { | |
_addNumberingForHeaderType(DocumentApp.ParagraphHeading.HEADING4, par, 3, counterHeader); | |
} else if (hdg == DocumentApp.ParagraphHeading.HEADING5) { | |
_addNumberingForHeaderType(DocumentApp.ParagraphHeading.HEADING5, par, 4, counterHeader); | |
} else if (hdg == DocumentApp.ParagraphHeading.HEADING6) { | |
_addNumberingForHeaderType(DocumentApp.ParagraphHeading.HEADING6, par, 5, counterHeader); | |
} | |
} | |
} | |
function _addNumberingForHeaderType(headerType, paragraph, initIndex, counterHeader) { | |
counterHeader[initIndex] = counterHeader[initIndex] + 1; | |
var currCounter = _getCurrenNumbering(initIndex, counterHeader); | |
for(var ii = initIndex + 1; ii < counterHeader.length; ii++) { | |
counterHeader[ii] = 0; | |
} | |
var content = paragraph.getText(); | |
var chunks = content.split('.\t') | |
var result = 'ok' | |
if(chunks.length > 1) { | |
paragraph.setText(currCounter+'.\t'+chunks[1]); | |
} else { | |
paragraph.setText(currCounter+'.\t'+chunks[0]); | |
} | |
} | |
function _getCurrenNumbering(initIndex, counterHeader) { | |
var value = ''; | |
for ( var i = 0; i <= initIndex; i++) { | |
if (value) { | |
value += '.'; | |
} | |
value += counterHeader[i]; | |
} | |
return value; | |
} |
Если вам еще не приходилось иметь дело со скриптами, то сделать нужно следующее.
1. Разметьте заголовки вашем документе как заголовки необходимого уровня. Пусть вас не смущает то, что они пока получатся не пронумерованными.
2. В рабочем документе перейдите в меню Инструменты -> Редактор скриптов.
3.. Выберите Пустой проект.
4..Скопируйте скрипт в открывшийся интерфейс редактора скриптов, нажмите Сохранить.
5. Присвойте проекту любое название, например, List.
6. В выпадающем меню доступных функций выберите addHeaderNumbering и нажмите кнопку Выполнить.
7. Вернитесь к вашему документу. Наш скрипт пронумеровал все заголовки документа иерархически!
No comments:
Post a Comment