Google文档导航面板

时间:2014-05-06 07:17:30

标签: google-apps-script google-docs

我正在为Google Docs编写脚本。 我想获得文档中所有标题的位置。然后我想在文档中创建一个包含这些标题的其他链接列表。我不想使用TABLE_OF_CONTENTS。 我想在Word 2010中创建相似性导航面板(link)。仅限Google文档。 我如何获得该职位,或创建文档中所有标题的链接并将其放在侧边栏中? 谢谢您的帮助!祝你有愉快的一天。

3 个答案:

答案 0 :(得分:9)

由于Google已采用此功能并于2016年3月3日发布,因此您不再需要使用第三方附加组件。

只需选中Tools > Document outline选项,即可开始使用。

答案 1 :(得分:2)

到目前为止,这个答案可能已经过时了,但Google Docs中有一个Add in允许您这样做。只需点击" Add-Ons"并搜索"目录"或"文档导航器" - 您将找到添加项,这将生成您所描述的导航栏。那里可能还有其他的附加功能......

答案 2 :(得分:1)

this example。这是一个带有脚本的Google Doc,用于创建带有目录的侧边栏。

以下是获取标题列表的代码。链接的文档在其脚本编辑器中包含所有内容。

//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);
}