如何使用 google apps 脚本获取 google doc 中的所有 h1 标题?

问题描述 投票:0回答:2

基本上,我想获取活动文档中的所有 h1 标题并将其更改为 h2 还计划进行一些字体样式等。

function abc() {
  var body = DocumentApp.getActiveDocument().getBody();

 // instead of appending the paragraph in line 8 i want to get all the h1 heading that are avialble in the active document

 var par1 = body.appendParagraph("changing h1 to h2 heading");
 par1.setHeading(DocumentApp.ParagraphHeading.HEADING2);


}
google-apps-script google-docs google-docs-api
2个回答
4
投票

您可以参考这个示例代码:

function findHeader() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  // Define the search parameters.
  var searchType = DocumentApp.ElementType.PARAGRAPH;
  var searchHeading = DocumentApp.ParagraphHeading.HEADING1;
  var searchResult = null;
  
  var style = {};
  style[DocumentApp.Attribute.FONT_FAMILY] = 'Calibri';
  style[DocumentApp.Attribute.BOLD] = true;

  // Search until the paragraph is found.
  while (searchResult = body.findElement(searchType, searchResult)) {
    var par = searchResult.getElement().asParagraph();
    if (par.getHeading() == searchHeading) {
      // Found one, update
      par.setHeading(DocumentApp.ParagraphHeading.HEADING2);
      par.setAttributes(style);
    }
  }
}

它有什么作用?

  1. 使用 Body.findElement(elementType, from) 搜索文档中的段落
  2. 使用 Paragraph.getHeading()
  3. 检查当前段落的标题
  4. 如果标题为
    DocumentApp.ParagraphHeading.HEADING1
    ,请将标题设置为
    DocumentApp.ParagraphHeading.HEADING2
    并使用 Paragraph.setHeading(heading)Paragraph.setAttributes(attributes)
  5. 更改其段落属性

输出:

之前:

enter image description here

之后:

enter image description here


0
投票
/**
 * @OnlyCurrentDoc
 */

function onOpen() {
  DocumentApp.getUi().createMenu('Header Tools')
      .addItem('Number Headers', 'numberH1Headers')
      .addToUi();
}

function numberH1Headers() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var count = 0;
  
  var paragraphs = body.getParagraphs();
  
  for (var i = 0; i < paragraphs.length; i++) {
    if (paragraphs[i].getHeading() === DocumentApp.ParagraphHeading.HEADING1) {
      count++;
      var text = paragraphs[i].getText();
      // Remove any existing numbers at the start
      text = text.replace(/^\d+\.\s*/, '');
      paragraphs[i].setText(count + '. ' + text);
    }
  }
  
  DocumentApp.getUi().alert('Numbered ' + count + ' headers');
}
© www.soinside.com 2019 - 2024. All rights reserved.