Панель навигации для Документов Google

Пишу скрипт для Google Docs. Я хочу узнать расположение всех заголовков в документе. Затем я хочу создать список других ссылок с этими заголовками в документе. Я не хочу использовать TABLE_OF_CONTENTS. Я хочу сделать панель навигации подобия в Word 2010 (ссылка ). Только в Google Docs. Как я могу получить позицию или создать ссылки на все заголовки в документе и разместить их на боковой панели? Спасибо за помощь! Хорошего дня.


person iron-viper    schedule 06.05.2014    source источник


Ответы (3)


См. этот пример. Это документ Google со сценарием для создания боковой панели с оглавлением.

Ниже приведен только код для получения списка заголовков. В связанном документе все есть в редакторе сценариев.

//Recursively get subsections
function getHeadersFromParagraphs(paragraphs, limit, starter){
  var headers = [], header, hType, level, start, result,
      paragraph,
      heading,
      i,
      h1 = DocumentApp.ParagraphHeading.HEADING1,
      h2 = DocumentApp.ParagraphHeading.HEADING2,
      h3 = DocumentApp.ParagraphHeading.HEADING3,
      h4 = DocumentApp.ParagraphHeading.HEADING4,
      h5 = DocumentApp.ParagraphHeading.HEADING5,
      h6 = DocumentApp.ParagraphHeading.HEADING6,
      hTypes = [h1,h2,h3,h4,h5,h6];

  //Loop through all paragraphs
  start = starter ? starter.id+1 : 0;
  for(i = start; i < paragraphs.length; i += 1){
    paragraph = paragraphs[i];
    heading = paragraph.getHeading();
    level = hTypes.indexOf(heading);

    if(level > -1 && level < limit){
      if(paragraph.getText() == "") continue;
      if(starter && level <= starter.level) { i--; break; }

      header = { name : paragraph.getText(), id : i, level : level };
      result = getHeadersFromParagraphs(paragraphs, limit, header);
      i = result.index;
      header.subheaders = result.headers;
      headers.push(header);
    }
  }
  return { headers : headers, index : i }
}

//Initiate parsing of headers. By default, limit to Heading 1.
function pullHeaders(level){
  level = level || 1;
  var body = DocumentApp.getActiveDocument().getBody(),
      paragraphs = body.getParagraphs();
  var result = getHeadersFromParagraphs(paragraphs, level);
  return JSON.stringify(result.headers);
}
person Fred    schedule 06.05.2014
comment
Как мне его использовать? Я думаю, что не могу использовать код JavaScript в файлах .gs prntscr.com/3gqzx8 - person iron-viper; 06.05.2014
comment
Можете ли вы помочь мне использовать это мой документ, я буду вам очень признателен. ты хороший человек. - person iron-viper; 06.05.2014
comment
Я должен был быть яснее - приведенный выше код создает список заголовков в документе. В связанном документе есть дополнительный код для создания боковой панели. - person Fred; 06.05.2014
comment
Большое спасибо за вашу помощь и за то, что откликнулись. - person iron-viper; 07.05.2014
comment
Как я могу составить список на боковой панели, щелкнув раскрывающийся список подходящих заголовков и erarhii? - person iron-viper; 07.05.2014
comment
Мне нужны заголовки древовидного меню на боковой панели. Что сохраняет иерархию. - person iron-viper; 07.05.2014
comment
Скрипт уже создает поддеревья для нижних уровней заголовков. Ищете разборные уровни? - person Fred; 07.05.2014

Вам больше не нужно прибегать к сторонним надстройкам, поскольку Google принял эту функцию и выпустил ее 09.03.2016.

Просто отметьте Tools > Document outline вариант, и все готово.

person David Salamon    schedule 11.03.2016

К настоящему времени этот ответ может быть устаревшим, но в Документах Google есть дополнение, которое позволяет вам это делать. Просто нажмите «Надстройки» и выполните поиск по «оглавлению» или «навигатору документов» - вы найдете надстройку, которая создаст вам панель навигации, как вы описали. Могут быть и другие надстройки, делающие то же самое ...

person Dynari    schedule 23.09.2015