带有不同首页标题的doc上的Google Apps脚本定位标题

时间:2015-07-23 21:52:50

标签: google-apps-script

我有一个简单的小应用程序脚本,可根据要求刷新我们的动态徽标。问题是如果设计师检查“不同的第一页页眉/页脚”复选框,我无法定位标题。如果检查了不同的标题,是否有目标?

以下是我目前正在使用的代码:

function onOpen() {
  DocumentApp.getUi().createMenu('Branding')
    .addItem('Update Branding', 'updateLogo')
    .addToUi();
}

function updateLogo() {
  var doc = DocumentApp.getActiveDocument();
  var header = doc.getHeader();
  if (header) {
    var images = header.getImages();
    var logoWidth = 250;
    if (images.length > 0) {
      var image = images[0];
      logoWidth = image.getWidth(); // pixels
      image.removeFromParent();
    }

    var freshLogo = UrlFetchApp.fetch("http://example.com/logo.jpg").getBlob();
    var newImage = header.insertImage(0, freshLogo);

    var logoRatio = newImage.getHeight() / newImage.getWidth();

    newImage.setWidth(logoWidth);
    newImage.setHeight(newImage.getWidth() * logoRatio);
  }
}

3 个答案:

答案 0 :(得分:2)

在完成Eric's Google Issues link中的一些未解决的问题后,我发现了以下内容。

这是我找到的,我会用一个干净的例子来说明。

  1. 制作新的Google文档
  2. 插入文字" Common header"进入标题部分
  3. 插入文字"公共页脚"在页脚部分
  4. 勾选不同的首页页眉/页脚选项
  5. 在现在空白标题部分输入文字"不同的第一个标题"
  6. 在现在空白页脚部分输入文字"不同的第一页脚"
  7. 打开脚本编辑器并运行以下功能:

    function getSectionText() {
      var d = DocumentApp.getActiveDocument();
      var p = d.getBody().getParent(); 
      // let's loop through all the child elements in the document
      for ( var i = 0; i < p.getNumChildren(); i += 1 ) {
        var t = p.getChild(i).getType();
        if ( t === DocumentApp.ElementType.BODY_SECTION ) continue; // not interested in the body
        if ( t === DocumentApp.ElementType.HEADER_SECTION ) {
          var h = p.getChild(i).asHeaderSection().getText();
          Logger.log( 'Child index number: ' + i );
          Logger.log( h );
        } else if ( t === DocumentApp.ElementType.FOOTER_SECTION ) {
          var f = p.getChild(i).asFooterSection().getText();
          Logger.log( 'Child index number: ' + i );
          Logger.log( f );
        }
      }  
    }
    

    当您查看日志文件时,您应该看到以下输出:

    [17-09-22 16:33:03:628 AEST] Child index number: 1
    [17-09-22 16:33:03:629 AEST] Common header
    [17-09-22 16:33:03:633 AEST] Child index number: 2
    [17-09-22 16:33:03:633 AEST] Common footer
    [17-09-22 16:33:03:636 AEST] Child index number: 3
    [17-09-22 16:33:03:637 AEST] Different first header
    [17-09-22 16:33:03:659 AEST] Child index number: 4
    [17-09-22 16:33:03:660 AEST] Different first footer
    

    这可以帮助您与常见页面和首页页眉和页脚进行交互。

答案 1 :(得分:0)

不幸的是,Apps Script的DocumentApp并不知道不同的首页页眉/页脚设置。请在此处提交功能请求:https://code.google.com/p/google-apps-script-issues/issues/list

答案 2 :(得分:0)

这个应该有效。您可能必须使用doc.getHeader()(第一页标题)以及DHeader(第2页,第3页,第4页...页眉。)。

var doc = DocumentApp.getActiveDocument();
var header = doc.getHeader();
var DHeader = header.getParent().getChild(2).asHeaderSection();

    /*
      Some may seem pointless as seeing that getParent().getChild(2)
          may be replaced somehow with getNextSibling(), however,
          googlescript does not allow
          the use of getNextSibling() for a HeaderSection
    */